Java 实现的多人网络聊天室

Java 实现的多人网络聊天室

Author : ScorpioDong

1. 成品展示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cX8TnrXd-1583670040782)(c.png)]

2. 软件界面的绘制

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WKCfKe67-1583670040784)(ui.png)]

3. Model

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qRA4GTQ8-1583670040785)(command.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uJgTNRcg-1583670040786)(Message.png)]

4. 网络通信

4.1 TCP客户端实现

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zb4heKrA-1583670040786)(tcpcomm.png)]

4.2 TCP服务端实现

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-STF5yvFA-1583670040786)(tcpserver.png)]

5. 软件各种事件的处理

信息发送事件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yQUlKuoR-1583670040787)(sendMessage.png)]

TCP初始化和消息接收事件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w1NVIFf1-1583670040788)(initSocket.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1tDhEKfz-1583670040789)(close.png)]

6. 工程源码

Gitee : https://gitee.com/ScorpioDong/MyChat

7. 有待改进之处

  1. 软件使用while(true)循环进行网络数据的接收,导致CPU资源利用率过高。后面考虑使用Java NIO事件驱动。
  2. 界面过于生硬,后面考虑如何美化一下。
发布了35 篇原创文章 · 获赞 28 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/m0_37771142/article/details/104739544