基于NIO的多客户端群聊
分析需求
服务端
- 监听客户端状态
- 保存客户端聊天记录
- 将客户端的信息分发给其他客户端 群聊
客户端
- 连接服务端
- 接受服务端分发的消息
- 发出消息
代码编写
代码里有详细的注释,这里我们主要是看一下编写步骤
服务端
---------------------初始化------------------------------
1.开启serversocket通道
2.开启选择器
3.设置非阻塞,注册任务
--------------------监听客户端-------------------1.判断是否有连接
2.有链接打印用户上线日志
---------------读取客户端发送到信息---------------------1.打开对应的通道
2.打印消息日志
3.分发消息给其他客户端
//服务端通道
private ServerSocketChannel channel;
// 多路复用选择器
private Selector selector;
public chatServer() {
try {
channel = ServerSocketChannel.open();
selector = Selector.open();
SocketAddress address = new InetSocketAddress(6666);
channel.socket().bind(address);
channel.configureBlocking(false);
channel.register(selector, SelectionKey.OP_ACCEPT);
} catch (Exception e) {
e.printStackTrace();
}
}
// 监听客户端变化
public void listenClient() throws Exception {
System.out.println("服务端开始监听客户端变化");
while (true) {
//获取需要处理的事件
int num = selector.select();
if (num == 0) {
continue;
}
Set<SelectionKey> set = selector.selectedKeys();
Iterator<SelectionKey> iterator = set.iterator();
while (iterator.hasNext()) {
SelectionKey key = iterator.next();
iterator.remove();
if (key.isAcceptable()) {

最低0.47元/天 解锁文章

1207





