首先实现的功能:
1.群聊。一个服务器端可以承载多个客户端(用户)来请求访问。服务器端对其请求做出处理,并转发给其他的客户端(用户)。
2.私聊。因为是控制台输入输出,所以私聊格式为:@xxx: 。而且自己给私发服务器端不响应。
思路:1.用ServerSocket模拟服务器端,并且开启多线程的调用accept()等待客户端连接。
2.Socket模拟客户端。使用多线程达到一边发一边收。
3.数据的传输用到的IO流DataInputStream(client.getInputStream())和DataOutputStream(client.getOutputStream())
4.TCP底层原理不再阐述。不懂:https://blog.csdn.net/qq_40301026/article/details/88623353
5.群聊功能:每来一个客户端,将其姓名作为key,客户端的对象地址作为value,,存在ConcurrentHashMap(线程安全)容器里面。当一个客户端发送消息时,服务器端作为中转站,从容器中拿到其他客户端,转发此消息。
6.私聊:对接收到的客户端消息进行检查,如果符合私聊格式就从容器中拿到私聊对象,转发给对方。
先来看看实现的效果????
*启动一个服务器端(IP地址本机,端口号:8848)和三个客户端。
*三个客户端加入聊天室
* 群聊
*私聊:
*离开:
代码:
服务器端:
package cn.liu.chat03;
import java.io.IOException;
import java.net.