JavaSocket实现多人聊天室.docx
- 文档编号:315590
- 上传时间:2022-10-08
- 格式:DOCX
- 页数:34
- 大小:51.40KB
JavaSocket实现多人聊天室.docx
《JavaSocket实现多人聊天室.docx》由会员分享,可在线阅读,更多相关《JavaSocket实现多人聊天室.docx(34页珍藏版)》请在冰豆网上搜索。
JavaSocket实现多人聊天室
JavaSocket实现多人聊天室---swing做UI
标签:
socket聊天javaexception服务器string
2011-08-3115:
06 20679人阅读 评论(25) 收藏 举报
分类:
java(21)
声明:
本文为博主原创文章,未经博主允许不得。
今天翻硬盘的workspace发现一个JavaSocket实现多人聊天室的源码,不记得是什么时候的事情了,貌似不是我写的。
但写得还不错,
至少算个有模有样的聊天室工具。
我简单的修改了一下,拿出来跟大家分享一下,仅供参考。
。
。
界面是用swing写的,还不懒,简约大方。
有图有真相:
正如上图所示,这个程序分为服务器端和客户端,说白了就是两个mainclass,用eclipse直接运行之。
。
。
。
。
聊天室的设计思想是:
在局域网下,利用socket进行连接通信,当服务器端启动的时候,利用Thread线程不停的等待客户端的;当有客户端开启连
接的时候,服务器端通过IO流反馈“上线用户”信息给客户端,客户端也使用线程不停的接收服务器的信息,从而实现多人在线聊天功能。
程序中有三个类,分别Server.java(服务器端)、Client(客户端)、User.java(javabean)。
代码如下:
Server.java(服务器端):
[html] viewplaincopy
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 .BindException;
14.import .ServerSocket;
15.import .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
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().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("消
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JavaSocket 实现 聊天室