Java Socket实现多人聊天室

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 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() + "\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")));

相关文档
最新文档