简易网络聊天室

git提交记录

00e07618510c4c991473436558774fb1.png

前期调查

在聊天室中的每个用户可以发送消息,发送的消息分为群聊消息和私聊消息,每两个用户的聊天消息显示在一个界面上,每个群组的聊天消息显示在一个界面上。通过netty框架来编写服务器端的转发 消息代码,客户端对每个消息的处理代码。

功能流程图

9f328b7d274f8fe1f6d78871bb2cbc72.png

面向对象设计类图

服务器端UML类图

60037ba6fd584d397f2e3b7b15163190.png

客户端UML类图

17f4b77a1f33f186574dbb1a84675c58.png

关键代码分析

服务器端转发群聊消息代码

ef1f504858ad01e94aa6fc8daccb1213.png

在ChannelUtils这个类中存储了许多map,其中一个map存储一个字符串类型的id和与之对应的ChannelGroup,服务器就是通过这个id获得ChannelGroup从而转发给ChannelGroup中的每个客户端,这样在一个群组里的其他客户端就能收到任何一个客户端发送的信息

服务器端转发私聊消息代码

fe6cc9942921d5c5fe0570b49e8b73ae.png

ChannelUtils中还有一个map存储每个用户的id和与之对应的Channel,通过这个Channel服务器端可以传输数据到客户端。当私聊消息传输到服务器端时,服务器端从消息中取出此消息的接收端id,然后通过id获取对应的Channel,再将消息封装好发送到接收端

客户端接收群聊消息代码(ClientChatMessageHandler类)

42acab0a299fd1f7a8b1545013b4b533.png

当服务器发送信息到客户端时,如果是群聊信息,客户端会自动调用ClientChatMessageHandler中的channelRead0方法。通过传输的信息,可以获得发送端的id和此消息属于哪个聊天界面,然后客户端调用方法将消息显示到聊天窗口中

客户端接收私聊消息代码

f84b477b3b1023affa435885f503c540.png

9e334eb15fe6dfb92d98df8d5518dadc.png

当客户端收到消息时,获取消息中的发送者id、消息内容、需要发送到哪个私聊窗口,若没有这个窗口则需新建一个窗口显示发送端和接收端的聊天消息,然后将消息显示到窗口中。

项目总结

课程设计可以学到许多课堂上学不到的知识,比如netty框架、git、云服务器等等,这些都需要我们在实践过程中去自学,还加强了我们的团队开发能力,知道如何将自己的代码交给别人使用,同时也知道如何使用别人的代码,将自己代码实现的功能和别人代码实现的功能结合起来,完善程序的功能.

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐