1 package com.tan.chat; 2 3 import java.awt.BorderLayout; 4 import java.awt.Container; 5 import java.awt.event.ActionListener; 6 import java.awt.event.ActionEvent; 7 import java.net.ServerSocket; 8 import java.net.Socket; 9 import java.io.ObjectInputStream; 10 import java.io.ObjectOutputStream; 11 12 import javax.swing.JFrame; 13 import javax.swing.JTextArea; 14 import javax.swing.JTextField; 15 import javax.swing.JScrollPane; 16 17 import com.tan.bean.User; 18 19 public class ChatServer extends JFrame { 20 private ObjectInputStream m_input; // 输入流 21 private ObjectOutputStream m_output; // 输出流 22 private JTextField m_enter; // 输入区域 23 private JTextArea m_display; // 显示区域 24 private int m_clientNumber = 0; // 连接的客户数 25 26 public ChatServer() // 在图形界面中添加组件 27 { 28 super("聊天程序服务器端"); 29 Container c = getContentPane(); 30 m_enter = new JTextField(); 31 m_enter.setEnabled(false); 32 m_enter.addActionListener(new ActionListener() { 33 public void actionPerformed(ActionEvent event) { // 向客户端发送数据 34 try { 35 String s = event.getActionCommand(); 36 m_output.writeObject(s); 37 m_output.flush(); 38 mb_displayAppend("服务器端: " + s); 39 m_enter.setText(""); // 清除输入区域的原有内容 40 } catch (Exception e) { 41 System.err.println("发生异常:" + e); 42 e.printStackTrace(); 43 } // try-catch结构结束 44 } // 方法actionPerformed结束 45 } // 实现接口ActionListener的内部类结束 46 ); // addActionListener方法调用结束 47 c.add(m_enter, BorderLayout.NORTH); 48 m_display = new JTextArea(); 49 c.add(new JScrollPane(m_display), BorderLayout.CENTER); 50 } // J_ChatServer构造方法结束 51 52 public void mb_displayAppend(String s) { 53 m_display.append(s + "\n"); 54 m_display.setCaretPosition(m_display.getText().length()); 55 m_enter.requestFocusInWindow(); // 转移输入焦点到输入区域 56 } // 方法mb_displayAppend结束 57 58 public boolean mb_isEndSession(String m) { 59 if (m.equalsIgnoreCase("q")) 60 return (true); 61 if (m.equalsIgnoreCase("quit")) 62 return (true); 63 if (m.equalsIgnoreCase("exit")) 64 return (true); 65 if (m.equalsIgnoreCase("end")) 66 return (true); 67 if (m.equalsIgnoreCase("结束")) 68 return (true); 69 return (false); 70 } // 方法mb_isEndSession结束 71 72 public void mb_run() { 73 try { 74 ServerSocket server = new ServerSocket(5000); 75 String m; // 来自客户端的消息 76 while (true) { 77 m_clientNumber++; 78 mb_displayAppend("等待连接[" + m_clientNumber + "]"); 79 Socket s = server.accept(); 80 mb_displayAppend("接收到客户端连接[" + m_clientNumber + "]"); 81 m_output = new ObjectOutputStream(s.getOutputStream()); 82 m_input = new ObjectInputStream(s.getInputStream()); 83 m_output.writeObject("连接成功"); 84 m_output.flush(); 85 m_enter.setEnabled(true); 86 do { 87 m = (String) m_input.readObject(); 88 mb_displayAppend("客户端: " + m); 89 } while (!mb_isEndSession(m));// do-while循环结束 90 m_output.writeObject("q"); // 通知客户端退出程序 91 m_output.flush(); 92 m_enter.setEnabled(false); 93 m_output.close(); 94 m_input.close(); 95 s.close(); 96 mb_displayAppend("连接[" + m_clientNumber + "]结束"); 97 } // while循环结束 98 } catch (Exception e) { 99 System.err.println("发生异常:" + e); 100 e.printStackTrace(); 101 mb_displayAppend("连接[" + m_clientNumber + "]发生异常"); 102 } // try-catch结构结束 103 } // 方法mb_run结束 104 105 public static void main(String args[]) { 106 ChatServer app = new ChatServer(); 107 108 app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 109 app.setSize(350, 150); 110 app.setVisible(true); 111 app.mb_run(); 112 } // 方法main结束 113 } // 类J_ChatServer结束
多线程还没有添加,消息响应也还没弄,后续完善
原文:http://www.cnblogs.com/tannian/p/4345623.html