久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

java+socket實現(xiàn)簡易局域網(wǎng)聊天室

這篇文章主要為大家詳細介紹了java+socket實現(xiàn)簡易局域網(wǎng)聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java+socket實現(xiàn)簡易局域網(wǎng)聊天室的具體代碼,供大家參考,具體內(nèi)容如下

服務(wù)器端

ServerFrame.java

package com.eze.chatroom.server;

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import java.awt.Color;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class ServerFrame extends JFrame {

? ? /**
? ? ?*?
? ? ?*/
? ? private static final long serialVersionUID = 1L;
? ? private JPanel contentPane;
? ? private JTextField txtPort;
? ? private JLabel lblOnlineCount;
? ? private JTextArea txtAreaInfo;
? ? private Server server;
? ? private JTextArea txtAreaPals;

? ? /**
? ? ?* Launch the application.
? ? ?*/
? ? public static void main(String[] args) {
? ? ? ? EventQueue.invokeLater(new Runnable() {
? ? ? ? ? ? public void run() {
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? ServerFrame frame = new ServerFrame();
? ? ? ? ? ? ? ? ? ? frame.setVisible(true);
? ? ? ? ? ? ? ? } catch (Exception e) {
? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
? ? }

? ? /**
? ? ?* Create the frame.
? ? ?*/
? ? public ServerFrame() {
? ? ? ? this.setTitle("server");
? ? ? ? this.setResizable(false);
? ? ? ? setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
? ? ? ? setBounds(100, 100, 658, 428);
? ? ? ? contentPane = new JPanel();
? ? ? ? contentPane.setForeground(Color.DARK_GRAY);
? ? ? ? contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
? ? ? ? setContentPane(contentPane);
? ? ? ? contentPane.setLayout(null);

? ? ? ? JLabel lblPort = new JLabel("port :");
? ? ? ? lblPort.setFont(new Font("宋體", Font.PLAIN, 18));
? ? ? ? lblPort.setBounds(14, 13, 72, 31);
? ? ? ? contentPane.add(lblPort);

? ? ? ? txtPort = new JTextField();
? ? ? ? txtPort.addKeyListener(new KeyAdapter() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void keyTyped(KeyEvent e) {
? ? ? ? ? ? ? ? int c = e.getKeyChar();
? ? ? ? ? ? ? ? if(!(c > KeyEvent.VK_0 && c < KeyEvent.VK_9)){
? ? ? ? ? ? ? ? ? ? e.consume();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? txtPort.setFont(new Font("宋體", Font.PLAIN, 20));
? ? ? ? txtPort.setBounds(89, 18, 138, 24);
? ? ? ? contentPane.add(txtPort);
? ? ? ? txtPort.setColumns(10);

? ? ? ? JScrollPane scrollPane = new JScrollPane();
? ? ? ? scrollPane.setBounds(245, 103, 378, 272);
? ? ? ? contentPane.add(scrollPane);

? ? ? ? txtAreaInfo = new JTextArea();
? ? ? ? scrollPane.setViewportView(txtAreaInfo);
? ? ? ? txtAreaInfo.setFont(new Font("Monospaced", Font.PLAIN, 20));

? ? ? ? JButton btnChange = new JButton("start");
? ? ? ? btnChange.addMouseListener(new MouseAdapter() {

? ? ? ? ? ? private boolean flag = true;
? ? ? ? ? ? @Override
? ? ? ? ? ? public void mouseClicked(MouseEvent e) {
? ? ? ? ? ? ? ? String portStr = txtPort.getText().trim();
? ? ? ? ? ? ? ? boolean isvalid = false;
? ? ? ? ? ? ? ? int port = 9999;
? ? ? ? ? ? ? ? if(!(portStr.startsWith("0") || portStr.equals(""))){
? ? ? ? ? ? ? ? ? ? port = Integer.valueOf(portStr);
? ? ? ? ? ? ? ? ? ? if(port >= 1024 && port <= 65535)
? ? ? ? ? ? ? ? ? ? ? ? isvalid = true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? if(!isvalid){
? ? ? ? ? ? ? ? ? ? JOptionPane.showMessageDialog(ServerFrame.this, "invalid port that is expected to put into the range of 1024~65535");
? ? ? ? ? ? ? ? ? ? return;
? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? if(flag){
? ? ? ? ? ? ? ? ? ? btnChange.setText("stop");
? ? ? ? ? ? ? ? ? ? txtAreaInfo.append("server started\n");
? ? ? ? ? ? ? ? ? ? flag = false;
? ? ? ? ? ? ? ? ? ? ServerFrame.this.server = new Server(ServerFrame.this, ServerFrame.this.getTitle(), port);
? ? ? ? ? ? ? ? ? ? Thread thdServer = new Thread(new Runnable() {
? ? ? ? ? ? ? ? ? ? ? ? @Override
? ? ? ? ? ? ? ? ? ? ? ? public void run() {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ServerFrame.this.server.start();
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? });
? ? ? ? ? ? ? ? ? ? thdServer.start();
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? btnChange.setText("start");
? ? ? ? ? ? ? ? ? ? ServerFrame.this.server.stop();
? ? ? ? ? ? ? ? ? ? txtAreaInfo.append("server stopped\n");
? ? ? ? ? ? ? ? ? ? flag = true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? btnChange.setFont(new Font("宋體", Font.PLAIN, 19));
? ? ? ? btnChange.setBackground(new Color(240, 255, 240));
? ? ? ? btnChange.setForeground(new Color(178, 34, 34));
? ? ? ? btnChange.setBounds(270, 17, 113, 27);
? ? ? ? contentPane.add(btnChange);

? ? ? ? JLabel lblPalsOnline = new JLabel("pals online:");
? ? ? ? lblPalsOnline.setBounds(18, 73, 113, 18);
? ? ? ? contentPane.add(lblPalsOnline);

? ? ? ? JLabel lblLogInfo = new JLabel("log info");
? ? ? ? lblLogInfo.setBounds(285, 73, 72, 18);
? ? ? ? contentPane.add(lblLogInfo);

? ? ? ? lblOnlineCount = new JLabel("0");
? ? ? ? lblOnlineCount.setBounds(123, 75, 72, 18);
? ? ? ? contentPane.add(lblOnlineCount);

? ? ? ? JScrollPane scrollPane_1 = new JScrollPane();
? ? ? ? scrollPane_1.setBounds(14, 111, 213, 264);
? ? ? ? contentPane.add(scrollPane_1);

? ? ? ? txtAreaPals = new JTextArea();
? ? ? ? scrollPane_1.setViewportView(txtAreaPals);

? ? }

? ? public JLabel getLblOnlineCount() {
? ? ? ? return lblOnlineCount;
? ? }

? ? public JTextArea getTxtAreaPals() {
? ? ? ? return txtAreaPals;
? ? }

? ? public JTextArea getTxtAreaInfo() {
? ? ? ? return txtAreaInfo;
? ? }
}

Server.java

package com.eze.chatroom.server;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.JTextArea;

public class Server {

? ? private ServerSocket server;
? ? private List<Socket> clients;
? ? private Map<String, String> pals;
? ? @SuppressWarnings("unused")
? ? private String name;
? ? private int port;
? ? private ServerFrame frame;

? ? public Server(ServerFrame frame, String name, int port){
? ? ? ? this.frame = frame;
? ? ? ? this.name = name;
? ? ? ? this.port = port;
? ? ? ? this.clients = new ArrayList<>();
? ? ? ? this.pals = new HashMap<>();
? ? }

? ? public void start(){
? ? ? ? try {
? ? ? ? ? ? this.server = new ServerSocket(port);
? ? ? ? ? ? System.out.println("server start at port "+port);
? ? ? ? ? ? while(true){
? ? ? ? ? ? ? ? Socket client = server.accept();
? ? ? ? ? ? ? ? Thread thdHandConn = new Thread(new HandleConnection(client, clients, pals, frame));
? ? ? ? ? ? ? ? thdHandConn.start();
? ? ? ? ? ? }
? ? ? ? }catch(SocketException e){
? ? ? ? ? ? System.out.println("server stop");
? ? ? ? }catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }

? ? public void stop(){
? ? ? ? try {
? ? ? ? ? ? for(Socket sock : clients){
? ? ? ? ? ? ? ? sock.close();
? ? ? ? ? ? }
? ? ? ? ? ? server.close();
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }

? ? public static void autoRoll(JTextArea area){
? ? ? ? area.setCaretPosition(area.getText().length());
? ? }
}

HandleConnnection.java

package com.eze.chatroom.server;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

public class HandleConnection implements Runnable {

? ? private Socket client;
? ? private List<Socket> clients;
? ? private Map<String, String> pals;
? ? private ServerFrame frame;

? ? public HandleConnection(Socket client, List<Socket> clients, Map<String, String> pals, ServerFrame frame){
? ? ? ? this.client = client;
? ? ? ? this.clients = clients;
? ? ? ? this.pals = pals;
? ? ? ? this.frame = frame;
? ? }

? ? @Override
? ? public void run() {
? ? ? ? String username = null;
? ? ? ? SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
? ? ? ? try {
? ? ? ? ? ? DataInputStream dataInput = new DataInputStream(client.getInputStream());
? ? ? ? ? ? DataOutputStream dataOutput = new DataOutputStream(client.getOutputStream());
? ? ? ? ? ? String totalFirst = dataInput.readUTF();
? ? ? ? ? ? username = totalFirst.split("_")[0];
? ? ? ? ? ? if(username.equals("")){
? ? ? ? ? ? ? ? dataOutput.writeUTF("no");
? ? ? ? ? ? ? ? client.close();
? ? ? ? ? ? ? ? return;
? ? ? ? ? ? }
? ? ? ? ? ? dataOutput.writeUTF("ok");
? ? ? ? ? ? String hello = formatDate.format(new Date())+"\n"+client.getRemoteSocketAddress().toString()+username+" join romm\n";
? ? ? ? ? ? frame.getTxtAreaInfo().append(hello);
? ? ? ? ? ? Server.autoRoll(frame.getTxtAreaInfo());
? ? ? ? ? ? this.forwardMsg(hello);
? ? ? ? ? ? clients.add(client);
? ? ? ? ? ? pals.put(client.getRemoteSocketAddress().toString(), username);
? ? ? ? ? ? this.updatePalsList();
? ? ? ? ? ? while(true){
? ? ? ? ? ? ? ? String word = dataInput.readUTF();
? ? ? ? ? ? ? ? String date = formatDate.format(new Date());
? ? ? ? ? ? ? ? String msg = date+" "+username+"\n"+word;
? ? ? ? ? ? ? ? frame.getTxtAreaInfo().append(msg+"\n");
? ? ? ? ? ? ? ? Server.autoRoll(frame.getTxtAreaInfo());
? ? ? ? ? ? ? ? this.forwardMsg(msg);
? ? ? ? ? ? }
? ? ? ? }catch (SocketException e) {
? ? ? ? ? ? clients.remove(client);
? ? ? ? ? ? pals.remove(client.getRemoteSocketAddress().toString(), username);
? ? ? ? ? ? this.updatePalsList();
? ? ? ? ? ? String leaveMsg = formatDate.format(new Date())+"\n"+username+" leaved room\n";
? ? ? ? ? ? this.frame.getTxtAreaInfo().append(leaveMsg);
? ? ? ? ? ? Server.autoRoll(frame.getTxtAreaInfo());
? ? ? ? ? ? this.forwardMsg(leaveMsg);
? ? ? ? }catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }

? ? }

? ? protected void updatePalsList(){
? ? ? ? this.frame.getLblOnlineCount().setText(String.valueOf(clients.size()));
? ? ? ? this.frame.getTxtAreaPals().setText("");
? ? ? ? for(Map.Entry<String, String> entry : pals.entrySet()){
? ? ? ? ? ? this.frame.getTxtAreaPals().append(entry.getKey()+" "+entry.getValue()+"\n");
? ? ? ? }
? ? }

? ? protected void forwardMsg(String msg){
? ? ? ? try {
? ? ? ? ? ? for(Socket sock : clients){
? ? ? ? ? ? ? ? if(sock != client){
? ? ? ? ? ? ? ? ? ? DataOutputStream dataOutput = new DataOutputStream(sock.getOutputStream());
? ? ? ? ? ? ? ? ? ? dataOutput.writeUTF(msg);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }

}

客戶端

ClientLoginViewer.java

package com.eze.chatroom.client;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class ClientLoginViewer extends JFrame {

? ? /**
? ? ?*?
? ? ?*/
? ? private static final long serialVersionUID = 1L;
? ? private JPanel contentPane;
? ? private ClientWin win;
? ? private JTextField txtUsername;
? ? private JTextField txtServer;
? ? private JLabel lblPort;
? ? private JTextField txtPort;
? ? private Client client;

? ? /**
? ? ?* Launch the application.
? ? ?*/
? ? public static void main(String[] args) {
? ? ? ? EventQueue.invokeLater(new Runnable() {
? ? ? ? ? ? public void run() {
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? ClientLoginViewer frame = new ClientLoginViewer();
? ? ? ? ? ? ? ? ? ? frame.setVisible(true);
? ? ? ? ? ? ? ? } catch (Exception e) {
? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
? ? }

? ? /**
? ? ?* Create the frame.
? ? ?*/
? ? public ClientLoginViewer() {
? ? ? ? setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
? ? ? ? setBounds(100, 100, 603, 366);
? ? ? ? contentPane = new JPanel();
? ? ? ? contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
? ? ? ? setContentPane(contentPane);
? ? ? ? contentPane.setLayout(null);

? ? ? ? JLabel lblNewLabel = new JLabel("username:");
? ? ? ? lblNewLabel.setFont(new Font("宋體", Font.PLAIN, 20));
? ? ? ? lblNewLabel.setBounds(71, 41, 113, 18);
? ? ? ? contentPane.add(lblNewLabel);

? ? ? ? txtUsername = new JTextField();
? ? ? ? txtUsername.setText("admin");
? ? ? ? txtUsername.setBounds(209, 38, 235, 24);
? ? ? ? contentPane.add(txtUsername);
? ? ? ? txtUsername.setColumns(10);

? ? ? ? JLabel lblServer = new JLabel("server:");
? ? ? ? lblServer.setFont(new Font("宋體", Font.PLAIN, 20));
? ? ? ? lblServer.setBounds(71, 93, 90, 18);
? ? ? ? contentPane.add(lblServer);

? ? ? ? txtServer = new JTextField();
? ? ? ? txtServer.setText("localhost");
? ? ? ? txtServer.setColumns(10);
? ? ? ? txtServer.setBounds(209, 92, 235, 24);
? ? ? ? contentPane.add(txtServer);

? ? ? ? lblPort = new JLabel("port:");
? ? ? ? lblPort.setFont(new Font("宋體", Font.PLAIN, 20));
? ? ? ? lblPort.setBounds(71, 149, 90, 18);
? ? ? ? contentPane.add(lblPort);

? ? ? ? txtPort = new JTextField();
? ? ? ? txtPort.setText("2222");
? ? ? ? txtPort.addKeyListener(new KeyAdapter() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void keyTyped(KeyEvent e) {
? ? ? ? ? ? ? ? int c = e.getKeyChar();
? ? ? ? ? ? ? ? if(c < KeyEvent.VK_0 || c > KeyEvent.VK_9){
? ? ? ? ? ? ? ? ? ? e.consume();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? txtPort.setBounds(209, 148, 235, 24);
? ? ? ? contentPane.add(txtPort);
? ? ? ? txtPort.setColumns(10);

? ? ? ? JButton btnLogin = new JButton("login");
? ? ? ? btnLogin.addActionListener(new ActionListener() {
? ? ? ? ? ? public void actionPerformed(ActionEvent e) {
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? btnLogin.addMouseListener(new MouseAdapter() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void mouseClicked(MouseEvent e) {
? ? ? ? ? ? ? ? String username = txtUsername.getText();
? ? ? ? ? ? ? ? String server = txtServer.getText();
? ? ? ? ? ? ? ? String portStr = txtPort.getText();
? ? ? ? ? ? ? ? if(!this.argsValid(username, server, portStr)){
? ? ? ? ? ? ? ? ? ? String error = "please input valid arguments which username, password, server, port"
? ? ? ? ? ? ? ? ? ? ? ? ? ? + " are not allowed be empty and port should be in the range of 1024~65535";
? ? ? ? ? ? ? ? ? ? JOptionPane.showMessageDialog(ClientLoginViewer.this, error);
? ? ? ? ? ? ? ? ? ? return;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? client = new Client(username, server, Integer.valueOf(portStr), ClientLoginViewer.this.win);
? ? ? ? ? ? ? ? if(ClientLoginViewer.this.client.login()){
? ? ? ? ? ? ? ? ? ? ClientLoginViewer.this.setVisible(false);
? ? ? ? ? ? ? ? ? ? ClientLoginViewer.this.win.setVisible(true);
? ? ? ? ? ? ? ? ? ? win.setClient(client);
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? JOptionPane.showMessageDialog(ClientLoginViewer.this, "login falied");
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }

? ? ? ? ? ? protected boolean argsValid(String username, String server, String portStr){
? ? ? ? ? ? ? ? if(username.equals("") || server.equals("") || portStr.equals(""))
? ? ? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? ? ? int port = Integer.valueOf(portStr);
? ? ? ? ? ? ? ? if(port < 1024 || port > 65535)
? ? ? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? btnLogin.setFont(new Font("宋體", Font.PLAIN, 20));
? ? ? ? btnLogin.setBounds(213, 222, 113, 27);
? ? ? ? contentPane.add(btnLogin);

? ? ? ? this.initOther();
? ? }

? ? protected void initOther(){
? ? ? ? this.win = new ClientWin();
? ? ? ? this.setResizable(false);
? ? }
}

ClientWin.java

package com.eze.chatroom.client;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import com.eze.chatroom.server.Server;

import javax.swing.JTextField;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import java.awt.Font;
import javax.swing.JTextArea;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.DataOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ClientWin extends JFrame {

? ? /**
? ? ?*?
? ? ?*/
? ? private static final long serialVersionUID = 1L;
? ? private JPanel contentPane;
? ? private JTextField txtSendMsg;
? ? private JTextArea txtAreaShowMsg;
? ? @SuppressWarnings("unused")
? ? private Client client;
? ? private DataOutputStream dataOutput;
? ? private JScrollPane scrollPane;

? ? /**
? ? ?* Create the frame.
? ? ?*/

? ? public ClientWin() {
? ? ? ? setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
? ? ? ? setBounds(100, 100, 631, 467);
? ? ? ? contentPane = new JPanel();
? ? ? ? contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
? ? ? ? setContentPane(contentPane);
? ? ? ? contentPane.setLayout(null);

? ? ? ? scrollPane = new JScrollPane();
? ? ? ? scrollPane.setBounds(7, 7, 595, 351);
? ? ? ? contentPane.add(scrollPane);

? ? ? ? txtAreaShowMsg = new JTextArea();
? ? ? ? txtAreaShowMsg.setFont(new Font("Monospaced", Font.PLAIN, 20));
? ? ? ? scrollPane.setViewportView(txtAreaShowMsg);

? ? ? ? txtSendMsg = new JTextField();
? ? ? ? txtSendMsg.setBounds(14, 371, 265, 41);
? ? ? ? txtSendMsg.setFont(new Font("宋體", Font.PLAIN, 20));
? ? ? ? contentPane.add(txtSendMsg);
? ? ? ? txtSendMsg.setColumns(10);

? ? ? ? JButton btnPost = new JButton("post");
? ? ? ? btnPost.addMouseListener(new MouseAdapter() {

? ? ? ? ? ? private SimpleDateFormat dateFormate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
? ? ? ? ? ? @Override
? ? ? ? ? ? public void mouseClicked(MouseEvent e) {
? ? ? ? ? ? ? ? String sendMsg = txtSendMsg.getText();
? ? ? ? ? ? ? ? if(!sendMsg.equals("")){
? ? ? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? ? ? String date = dateFormate.format(new Date());
? ? ? ? ? ? ? ? ? ? ? ? dataOutput.writeUTF(sendMsg);
? ? ? ? ? ? ? ? ? ? ? ? ClientWin.this.getTxtAreaShowMsg().append(date+" you\n"+sendMsg+"\n");
? ? ? ? ? ? ? ? ? ? ? ? Server.autoRoll(ClientWin.this.getTxtAreaShowMsg());
? ? ? ? ? ? ? ? ? ? ? ? ClientWin.this.txtSendMsg.setText("");
? ? ? ? ? ? ? ? ? ? } catch (IOException e1) {
? ? ? ? ? ? ? ? ? ? ? ? e1.printStackTrace();
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? btnPost.setBounds(377, 378, 113, 27);
? ? ? ? btnPost.setFont(new Font("宋體", Font.PLAIN, 20));
? ? ? ? contentPane.add(btnPost);

? ? ? ? this.initOther();

? ? }

? ? protected void initOther(){
? ? ? ? this.setResizable(false);
? ? }

? ? public void setClient(Client client) {
? ? ? ? this.client = client;
? ? ? ? try {
? ? ? ? ? ? this.dataOutput = new DataOutputStream(client.getClient().getOutputStream());
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }

? ? public JTextArea getTxtAreaShowMsg() {
? ? ? ? return txtAreaShowMsg;
? ? }

? ? public void setTxtSendMsg(JTextField txtSendMsg) {
? ? ? ? this.txtSendMsg = txtSendMsg;
? ? }
}

Client.java

package com.eze.chatroom.client;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JOptionPane;

public class Client {

? ? private Socket client;
? ? private String username;
? ? private String server;
? ? private int port;
? ? private ClientWin win;

? ? public Client(String username, String server, int port, ClientWin win){
? ? ? ? this.username = username;
? ? ? ? this.server = server;
? ? ? ? this.port = port;
? ? ? ? this.win = win;
? ? }

? ? public boolean login(){
? ? ? ? try {
? ? ? ? ? ? client = new Socket(server, port);
? ? ? ? ? ? DataInputStream dataInput = new DataInputStream(client.getInputStream());
? ? ? ? ? ? DataOutputStream dataOutput = new DataOutputStream(client.getOutputStream());
? ? ? ? ? ? dataOutput.writeUTF(username+"_");
? ? ? ? ? ? String ret = dataInput.readUTF();
? ? ? ? ? ? if(ret.contains("ok")){
? ? ? ? ? ? ? ? Thread thdReader = new Thread(new ClientReader(client, win));
? ? ? ? ? ? ? ? thdReader.start();
? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? }
? ? ? ? } catch (UnknownHostException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? JOptionPane.showMessageDialog(win, "unknown host");
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? ? ? return false;
? ? }

? ? public Socket getClient() {
? ? ? ? return client;
? ? }

}

ClientReader.java

package com.eze.chatroom.client;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;

import javax.swing.JOptionPane;

import com.eze.chatroom.server.Server;

public class ClientReader implements Runnable {

? ? private ClientWin win;
? ? private Socket client;

? ? public ClientReader(Socket client ,ClientWin win){
? ? ? ? this.client = client;
? ? ? ? this.win = win;
? ? }

? ? @Override
? ? public void run() {
? ? ? ? this.doHand();
? ? }

? ? protected void doHand(){
? ? ? ? try {
? ? ? ? ? ? DataInputStream dataInput = new DataInputStream(client.getInputStream());
? ? ? ? ? ? while(true){
? ? ? ? ? ? ? ? String msg = dataInput.readUTF();
? ? ? ? ? ? ? ? win.getTxtAreaShowMsg().append(msg+"\n");
? ? ? ? ? ? ? ? Server.autoRoll(win.getTxtAreaShowMsg());
? ? ? ? ? ? }
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? //e.printStackTrace();
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? client.close();
? ? ? ? ? ? } catch (IOException e1) {
? ? ? ? ? ? ? ? e1.printStackTrace();
? ? ? ? ? ? }
? ? ? ? ? ? System.out.println("client disconnected");
? ? ? ? ? ? JOptionPane.showMessageDialog(win, "you have been disconnected");
? ? ? ? }
? ? }

}

運行效果

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持html5模板網(wǎng)。

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

這篇文章主要為大家詳細介紹了Java實現(xiàn)聊天室界面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要為大家詳細介紹了Java實現(xiàn)局域網(wǎng)聊天室功能,包括私聊、群聊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要為大家詳細介紹了Java用局域網(wǎng)實現(xiàn)聊天室功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要為大家詳細介紹了java?socket實現(xiàn)局域網(wǎng)聊天,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要為大家詳細介紹了Java實現(xiàn)局域網(wǎng)IP地址掃描,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
主站蜘蛛池模板: 欧美激情精品久久久久久变态 | 精品国产乱码久久久久久牛牛 | 日韩欧美理论片 | 日韩欧美二区 | 尹人av| 狠狠综合网 | 成人精品一区二区 | 国产精品一区免费 | 欧美精品在线一区二区三区 | 日韩一区二区成人 | 日韩一区在线播放 | 欧美日韩国产精品 | 亚洲免费网址 | 欧美视频一级 | av黄色在线观看 | 国产三级精品视频 | 国产精品成人一区二区三区 | 久久久91| 色站综合| 伊人色综合久久久天天蜜桃 | 国产一级黄色网 | 国产免费视频 | 中文字幕在线观看av | 91精品国产乱码久久久久久久久 | 国产激情福利 | 超碰成人在线观看 | 日韩色视频 | 亚洲综合二区 | 成人小视频在线观看 | 九色在线视频 | 国产高清亚洲 | 91视频一88av | 欧美日韩国产中文字幕 | 亚洲免费观看视频网站 | 国产精品99久久久久久人 | 综合色播 | 日韩高清一区 | 国内91在线 | 正在播放一区二区 | 国产真实精品久久二三区 | 久久一级大片 |