主要说明的是:
1.服务器端开启3个线程:
主线程进行端口监听,
第一个子线程由主线程派生出来,用来遍历所有已接入的客户端,
第二个线程由第一个子线程派生出来,用来将客户端发送的信息转发给所有的客户端,第二个线程其实是多个,这里的第二个是层次的说明。
主线程 -----> 遍历线程 -----<获取到客户端发送的信息>-----> 转发线程
2.客户端开启2个线程:
主线程获取用户输入,
子线程读取服务器送回的数据并显示。
3.客户端的信息输入
用户可以进行输入信息,输入特定的字符串时结束输入并将信息发送至服务器。
4.服务器接收信息
服务器读取到客户端信息后需要将构建一个信息对象,然后将该对象转发给所有的客户端。
5.服务器的日志记录
创建一个文件保存服务器的运行记录,创建时主要检查文件是否已存在。
6.对象传送
将对象转换为字节流进行发送,需要进行序列化。对于需要序列化的对象,其成员变量必须是可序列化的。
7.工程目录:
ClientBean:客户端对象,服务器端程序与客户端程序都需要使用,无法序列化。
ClientManager:服务端维护所有客户端的工具类。
EntranceClient:客户端入口程序。
EntranceServer:服务器入口程序。
MessageBean:服务器发送给客户端的信息对象,需要进行序列化。
MessageBroadcaster:服务器信息广播子线程,在服务器获取客户端发送的信息后调用。
Sender:信息发出者,包含了客户端的IP(String),Port(int),是MessageBean的一个成员变量。
SerialMessage:对象转换为字节/字节解析成对象。
ServerLog:服务器端日志操作。