Netty的深入浅出--32.NIO实现简单网络聊天程序(下)

接上一个程序:Netty的深入浅出--32.NIO实现简单网络聊天程序(上)

编写由服务端收到客户端发送过来的请求然后,又分发给其他已经连接好的客户端上面

遍历获取发送客户端的 UUID的值:

Netty的深入浅出--32.NIO实现简单网络聊天程序(下)

 将请求信息发送给其他客户端:

Netty的深入浅出--32.NIO实现简单网络聊天程序(下)

启动服务器,启动客户端:

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

客户端:

创建客户端NioClient
Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

和服务端差不多,不过客户端是通过socketchannel调用open()方法建立连接:

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

通过selector 调用open()方法;

将socketChannel注册到selector中,这里要注意的是SelectionKey的连接key是OP_CONNECT,判断是否已经建立连接。

Netty的深入浅出--32.NIO实现简单网络聊天程序(下)

建立连接:

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

select()方法是阻塞式的

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

判断是否连接上

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

通过selectionKey.channel()获取socketChannel

这里关于为什么强制转换成socketchannel,之前已经讲过了哦。

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

 判断连接是否正处于一个正在进行的状态:

Netty的深入浅出--32.NIO实现简单网络聊天程序(下)

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

是否是正在连接,是的话,就完成连接过程:

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

连接成功之后,向服务端发送的请求信息:

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

将数据写出去:

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

完成输入,建立一个单例的线程池:

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

将键盘输入的数据发送给服务端:

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

注册一个读事件:

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

进行读取:

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

将从服务端获取到的字节数组打印出来:

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

清空处理完之后的keySet

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

启动服务端,两个客户端:

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

通过nc发送:

Netty的深入浅出--32.NIO实现简单网络聊天程序(下) 

Netty的深入浅出--32.NIO实现简单网络聊天程序(下)