import java.awt.*; import java.net.*; import java.io.*; import java.awt.event.*; public class Client extends Frame implements Runnable { private TextField nameBox=new TextField("<姓名>"); private TextArea msgView=new TextArea(); private TextField sendBox=new TextField(); private BufferedReader reader; private PrintWriter writer; private Socket socket; public Client(String title) { super(title); msgView.setEditable(false); add(nameBox,"North"); add(msgView,"Center"); add(sendBox,"South"); sendBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { try{ writer.println(nameBox.getText()+":"+sendBox.getText()); sendBox.setText(""); }catch(Exception ie){} } }); pack(); } public void run() { while(true){ try{ msgView.append(reader.readLine()+"\n"); }catch(IOException ie){ } } } private void connect() { try{ msgView.append("和服务器套接字连接\n"); socket=new Socket("127.0.0.1",2554); msgView.append("聊天就绪\n"); reader=new BufferedReader( new InputStreamReader(socket.getInputStream())); writer=new PrintWriter(socket.getOutputStream(),true); new Thread(this).start(); }catch(Exception e){ msgView.append("连接失败"); } } public static void main(String[] args) { Client client=new Client("聊天"); client.setVisible(true); client.connect(); } } import java.net.*; import java.io.*; import java.util.*; public class Server { private ServerSocket server; private BManager bMan=new BManager(); public Server(){}; void startServer() { try { server=new ServerSocket(2554); System.out.println("服务器套接字创建完毕"); while(true) { Socket socket=server.accept(); new Chat_Thread(socket).start(); bMan.add(socket); bMan.sendClientInfo(); } } catch(Exception e) { System.out.println(e); } } public static void main(String [] args) { Server server=new Server(); server.startServer(); } class Chat_Thread extends Thread { Socket socket; private BufferedReader reader; private PrintWriter writer; Chat_Thread(Socket socket) { this.socket=socket; } public void run() { try { reader=new BufferedReader(new InputStreamReader(socket.getInputStream())); writer=new PrintWriter(socket.getOutputStream(),true); String msg; while((msg=reader.readLine())!=null) { System.out.println(msg); bMan.sendToAll(msg); } }catch(Exception e){ }finally{ try{ bMan.remove(socket); if(reader!=null)reader.close(); if(writer!=null)writer.close(); if(socket!=null)socket.close(); reader=null;writer=null;socket=null; System.out.println("客户机离开"); bMan.sendClientInfo(); }catch(Exception e){} } } } class BManager extends Vector { BManager(){} void add(Socket sock) { super.add(sock); } void remove(Socket sock) { super.remove(sock); } synchronized void sendToAll(String msg) { PrintWriter writer=null; Socket sock; for(int i=0;i<size();i++) { sock=(Socket)elementAt(i); try { writer=new PrintWriter(sock.getOutputStream(),true); }catch(IOException ie){} if(writer!=null)writer.println(msg); } } synchronized void sendClientInfo() { String info="当前在线人数:"+size(); System.out.println(info); sendToAll(info); } } } |
|