服务端
package 多人聊天;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Gserver implements Runnable {private int Port = 9999;private ServerSocket SS;private Socket socket;private ArrayList clients = new ArrayList(); //保存客户端线程public Gserver(){try{ SS = new ServerSocket(Port);new Thread(this).start();}catch(Exception ex){ } }public void run(){try{while(true){socket = SS.accept();ChatThread ct = new ChatThread(socket);clients.add(ct);ct.start();} }catch(Exception ex){ }}class ChatThread extends Thread{private Socket s;private InputStream is;private OutputStream os;private BufferedReader br;private PrintStream ps;public ChatThread(Socket socket) throws Exception{this.s = socket;is = this.s.getInputStream();os = this.s.getOutputStream(); br = new BufferedReader(new InputStreamReader(is));ps = new PrintStream(os);}public void run(){try{while(true){String str = br.readLine(); sendMessage(str);}}catch (Exception ex){}}public void sendMessage(String str){for(int i=0; i<clients.size(); i++){ChatThread ct = (ChatThread)clients.get(i);ct.ps.println(str);}}}public static void main(String[] args){new Gserver();}
}
客户端
package 多人聊天;import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Gclient extends JFrame implements ActionListener, Runnable {private Socket socket;private int Port = 9999;private InetAddress ip;private String name;private JTextArea area = new JTextArea("以下是聊天内容:\n");private JTextField field = new JTextField("");public Gclient(){this.setTitle("客户端");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.add(field,BorderLayout.NORTH);field.addActionListener(this);this.add(area, BorderLayout.CENTER); this.setSize(240, 260);this.setVisible(true);name = JOptionPane.showInputDialog("输入昵称:");try{ip = InetAddress.getByName("Localhost");socket = new Socket(ip,Port);JOptionPane.showMessageDialog(this, "连接成功");this.setTitle("客户端:" + name);new Thread(this).start();}catch (Exception ex){ }}public void run(){try{while(true){InputStream is = socket.getInputStream();BufferedReader bf = new BufferedReader(new InputStreamReader(is));String str = bf.readLine();area.append(str + '\n');}}catch (Exception ex){ }}public void actionPerformed(ActionEvent e){try{OutputStream os = socket.getOutputStream();PrintStream ps = new PrintStream(os);ps.println(name + "说:" + field.getText());field.setText("");}catch (Exception ex){ }}public static void main(String[] args) {new Gclient();}
}
结果