Java 实现的多人网络聊天室

Author : ScorpioDong

1. 成品展示

java多用户聊天室程序 java实现多人聊天室_TCP

2. 软件界面的绘制

Java可用的GUI框架有AWT,Swing、JavaFX等,JavaFX是Java推荐使用的较大型的GUI框架,界面拥有很高的可定制性。因为本软件功能较少,以学习网络通信为目的,所以使用简单易上手的Swing框架。

这里新建了一个MainFrame的类,继承自JFrame,实现软件的界面。(这里直接使用的绝对布局,简单粗暴)

java多用户聊天室程序 java实现多人聊天室_TCP_02

3. Model

软件中定义了两个Model:Command 和 Message

Command数据模型负责网络数据传输中的命令传输。

java多用户聊天室程序 java实现多人聊天室_Swing_03

Message数据模型负责网络数据传输中的消息和消息附加信息的传输,包括发信人昵称,发信人IP,发信时间,信息内容。

java多用户聊天室程序 java实现多人聊天室_Java_04

4. 网络通信

4.1 TCP客户端实现

定义了一个TcpComm类,继承自Socket类,自定义了write和read方法。

java多用户聊天室程序 java实现多人聊天室_TCP_05

4.2 TCP服务端实现

这里使用了最简单的方法,ServerSocket监听端口,当accept方法的到一个Socket对象时,就开辟一个线程,进行数据的处理。(此方法适合接入量小的时候,接入量大请考虑使用NIO)

java多用户聊天室程序 java实现多人聊天室_Java_06

5. 软件各种事件的处理

信息发送事件

java多用户聊天室程序 java实现多人聊天室_Swing_07

TCP初始化和消息接收事件

java多用户聊天室程序 java实现多人聊天室_java多用户聊天室程序_08

客户端程序结束事件,用于向服务器告知下线和资源释放

java多用户聊天室程序 java实现多人聊天室_java多用户聊天室程序_09

6. 工程源码

7. 有待改进之处

  1. 软件使用while(true)循环进行网络数据的接收,导致CPU资源利用率过高。后面考虑使用Java NIO事件驱动。
  2. 界面过于生硬,后面考虑如何美化一下。