TCP通信---实现 群聊

群聊:
当有 客户机 给 服务器 发消息时,
这个消息必须 同时被发送到 其他的客户机。(注意:并不是直接让客户机之间进行连接,而是服务器在中间传)

一、构想:
1.QQ怎么运作?
首先,用户需要 通过验证 加入到某一个群;
加入之后,每个用户都会有自己的一个聊天室界面,
这个界面中实时更新所有群成员发送的消息。

2.框架图:
2.1.整体:在这里插入图片描述2.2.服务器和单一客户机交互图:
2.2.1.用户信息正确:
在这里插入图片描述2.2.2.用户信息错误:
在这里插入图片描述
二、代码架构
根据以上,
感觉只需构建 服务器 和 客户机 这2个类就可实现这个聊天室。
但这样一来就会造成这2个类中包含了 过多方法,
有悖于面向对象的“单一职责原则”。
不利于后期对 这个程序 修改扩展。
因此这里我们对 这2个类 进行了更加仔细的 职责划分。
总共分成以下5个类:

ChatServer类:
	服务器类,主类
	包含————服务器的创建方法setUpServer(int port) 和 主函数入口main
	
		当程序开始运行,它会把 相应的端口port 设置为 服务器
		并让其始终处于 待连接状态。
		
		每当有 1个客户机连接上来,就实例化1个线程类(ServerThread)对象
		并启动1个线程去处理=为每个用户提供了1个独立的线程。



ServerThread类:
	客户端类,线程类。
	包含————实现了线程的启动方法run() 和 客户机服务器的通信处理方法processSocket()
		
		当然在通信之前
		我们必须要先验证这个用户信息是否正确
		这个验证方法我们在 DaoTool类 中实现。这里直接调用它的验证方法即可。



DaoTool:
	用户信息验证类。
	包含————实现了用户信息的验证方法checkLogin()。
		   它还储存了1个模拟的用户信息库userDB。



UserInfo:
	用户信息类。
	包含————保存了每1个用户的信息,包括用户名和密码。
	       定义了获取用户名和密码的方法。



ChatTools:
	聊天室类。
	包含————负责保存当前登录的每一个用户,
	  
	       当某1个客户机给服务器发了消息,
	       它需要立即把这条消息转发给其他客户机。

按以上 的构图如下:
在这里插入图片描述

发布了17 篇原创文章 · 获赞 14 · 访问量 6769

猜你喜欢

转载自blog.csdn.net/weixin_45881192/article/details/104093167