Java Socket实现多人聊天室
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java Socket实现多人聊天室---swing做UI
标签:socket聊天javaexception服务器string
2011-08-31 15:06 20679人阅读评论(25) 收藏举报分类:
java(21)
版权声明:本文为博主原创文章,未经博主允许不得转载。
今天翻硬盘的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.i mport java.io.IOException;
11.i mport java.io.InputStreamReader;
12.i mport java.io.PrintWriter;
13.i mport .BindException;
14.i mport .ServerSocket;
15.i mport .Socket;
16.i mport java.util.ArrayList;
17.i mport java.util.StringTokenizer;
18.
19.i mport javax.swing.DefaultListModel;
20.i mport javax.swing.JButton;
21.i mport javax.swing.JFrame;
22.i mport javax.swing.JLabel;
23.i mport javax.swing.JList;
24.i mport javax.swing.JOptionPane;
25.i mport javax.swing.JPanel;
26.i mport javax.swing.JScrollPane;
27.i mport javax.swing.JSplitPane;
28.i mport javax.swing.JTextArea;
29.i mport javax.swing.JTextField;
30.i mport javax.swing.border.TitledBorder;
31.
32.p ublic 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
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() + "\r\n");
81. txt_message.setText(null);
82. }
83.
84. // 构造放法
85. public Server() {
86.frame = new JFrame("服务器");
87. // 更改JFrame的图标:
88. //frame.setIconImage(Toolkit.getDefaultToolkit().creat
eImage(Client.class.getResource("qq.png")));