Java Socket实现多人聊天室---swing做UI - Go语言中文社区

Java Socket实现多人聊天室---swing做UI


今天翻硬盘的workspace发现一个Java Socket实现多人聊天室的源码,不记得是什么时候的事情了,貌似不是我写的。但写得还不错,

 

至少算个有模有样的聊天室工具。我简单的修改了一下,拿出来跟大家分享一下,仅供参考。。。

 

         界面是用swing写的,还不懒,简约大方。有图有真相:

 

 

 

正如上图所示,这个程序分为 服务器端和客户端,说白了就是 两个main class,用eclipse直接运行之。。。。。

 

           聊天室的设计思想是 :在局域网下, 利用socket进行连接通信,当服务器端启动的时候,利用Thread线程不停的等待客户端的链接;当有客户端开启连

接的时候,服务器端通过IO流反馈“上线用户”信息给客户端,客户端也使用线程不停的接收服务器的信息,从而实现多人在线聊天功能。

 

程序中有三个类,分别 Server.java(服务器端)、Client(客户端)、User.java(javabean)。代码如下:

 

Server.java(服务器端):

[html] view plaincopy
  1. import java.awt.BorderLayout;  
  2. import java.awt.Color;  
  3. import java.awt.GridLayout;  
  4. import java.awt.Toolkit;  
  5. import java.awt.event.ActionEvent;  
  6. import java.awt.event.ActionListener;  
  7. import java.awt.event.WindowAdapter;  
  8. import java.awt.event.WindowEvent;  
  9. import java.io.BufferedReader;  
  10. import java.io.IOException;  
  11. import java.io.InputStreamReader;  
  12. import java.io.PrintWriter;  
  13. import java.net.BindException;  
  14. import java.net.ServerSocket;  
  15. import java.net.Socket;  
  16. import java.util.ArrayList;  
  17. import java.util.StringTokenizer;  
  18.   
  19. import javax.swing.DefaultListModel;  
  20. import javax.swing.JButton;  
  21. import javax.swing.JFrame;  
  22. import javax.swing.JLabel;  
  23. import javax.swing.JList;  
  24. import javax.swing.JOptionPane;  
  25. import javax.swing.JPanel;  
  26. import javax.swing.JScrollPane;  
  27. import javax.swing.JSplitPane;  
  28. import javax.swing.JTextArea;  
  29. import javax.swing.JTextField;  
  30. import javax.swing.border.TitledBorder;  
  31.   
  32. public class Server {  
  33.   
  34.     private JFrame frame;  
  35.     private JTextArea contentArea;  
  36.     private JTextField txt_message;  
  37.     private JTextField txt_max;  
  38.     private JTextField txt_port;  
  39.     private JButton btn_start;  
  40.     private JButton btn_stop;  
  41.     private JButton btn_send;  
  42.     private JPanel northPanel;  
  43.     private JPanel southPanel;  
  44.     private JScrollPane rightPanel;  
  45.     private JScrollPane leftPanel;  
  46.     private JSplitPane centerSplit;  
  47.     private JList userList;  
  48.     private DefaultListModel listModel;  
  49.   
  50.     private ServerSocket serverSocket;  
  51.     private ServerThread serverThread;  
  52.     private ArrayList<ClientThread> clients;  
  53.   
  54.     private boolean isStart = false;  
  55.   
  56.     // 主方法,程序执行入口  
  57.     public static void main(String[] args) {  
  58.         new Server();  
  59.     }  
  60.   
  61.     // 执行消息发送  
  62.     public void send() {  
  63.         if (!isStart) {  
  64.             JOptionPane.showMessageDialog(frame, "服务器还未启动,不能发送消息!", "错误",  
  65.                     JOptionPane.ERROR_MESSAGE);  
  66.             return;  
  67.         }  
  68.         if (clients.size() == 0) {  
  69.             JOptionPane.showMessageDialog(frame, "没有用户在线,不能发送消息!", "错误",  
  70.                     JOptionPane.ERROR_MESSAGE);  
  71.             return;  
  72.         }  
  73.         String message = txt_message.getText().trim();  
  74.         if (message == null || message.equals("")) {  
  75.             JOptionPane.showMessageDialog(frame, "消息不能为空!", "错误",  
  76.                     JOptionPane.ERROR_MESSAGE);  
  77.             return;  
  78.         }  
  79.         sendServerMessage(message);// 群发服务器消息  
  80.         contentArea.append("服务器说:" + txt_message.getText() + "rn");  
  81.         txt_message.setText(null);  
  82.     }  
  83.   
  84.     // 构造放法  
  85.     public Server() {  
  86.         frame = new JFrame("服务器");  
  87.         // 更改JFrame的图标:  
  88.         //frame.setIconImage(Toolkit.getDefaultToolkit().createImage(Client.class.getResource("qq.png")));  
  89.         frame.setIconImage(Toolkit.getDefaultToolkit().createImage(Server.class.getResource("qq.png")));  
  90.         contentArea = new JTextArea();  
  91.         contentArea.setEditable(false);  
  92.         contentArea.setForeground(Color.blue);  
  93.         txt_message = new JTextField();  
  94.         txt_max = new JTextField("30");  
  95.         txt_port = new JTextField("6666");  
  96.         btn_start = new JButton("启动");  
  97.         btn_stop = new JButton("停止");  
  98.         btn_send = new JButton("发送");  
  99.         btn_stop.setEnabled(false);  
  100.         listModel = new DefaultListModel();  
  101.         userList = new JList(listModel);  
  102.   
  103.         southPanel = new JPanel(new BorderLayout());  
  104.         southPanel.setBorder(new TitledBorder("写消息"));  
  105.         southPanel.add(txt_message, "Center");  
  106.         southPanel.add(btn_send, "East");  
  107.         leftPanel = new JScrollPane(userList);  
  108.         leftPanel.setBorder(new TitledBorder("在线用户"));  
  109.   
  110.         rightPanel = new JScrollPane(contentArea);  
  111.         rightPanel.setBorder(new TitledBorder("消息显示区"));  
  112.   
  113.         centerSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel,  
  114.                 rightPanel);  
  115.         centerSplit.setDividerLocation(100);  
  116.         northPanel = new JPanel();  
  117.         northPanel.setLayout(new GridLayout(1, 6));  
  118.         northPanel.add(new JLabel("人数上限"));  
  119.         northPanel.add(txt_max);  
  120.         northPanel.add(new JLabel("端口"));  
  121.         northPanel.add(txt_port);  
  122.         northPanel.add(btn_start);  
  123.         northPanel.add(btn_stop);  
  124.         northPanel.setBorder(new TitledBorder("配置信息"));  
  125.   
  126.         frame.setLayout(new BorderLayout());  
  127.         frame.add(northPanel, "North");  
  128.         frame.add(centerSplit, "Center");  
  129. &#
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/xuxile/article/details/42736881
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 22:38:58
  • 阅读 ( 1340 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢