群聊:
当有 客户机 给 服务器 发消息时,
这个消息必须 同时被发送到 其他的客户机。(注意:并不是直接让客户机之间进行连接,而是服务器在中间传)
一、构想:
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个客户机给服务器发了消息,
它需要立即把这条消息转发给其他客户机。
按以上 的构图如下: