聊天单线程(后续添加多线程)

技术分享Client
技术分享
  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结束
Server

 多线程还没有添加,消息响应也还没弄,后续完善

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。