Java NIO 实现网络通信

1,242 total views, 3 views today

Java NIO 的相关资料很多,对 channel,buffer,selector 如何相关概念也有详细的阐述。但是,不亲自写代码调试一遍,对这些概念的理解仍然是一知半解。

即使代码跑起来,也不见得有多懂这些概念,因为只是肤浅的尝试,但肤浅的尝试胜过于纸上谈兵,至少迈出了第一步,后续深入,可能要等到真的有实际应用时,才会深入研究。先贴示例代码。

一个典型的服务端:

关键代码:

serverChannel.register(selector, SelectionKey.OP_ACCEPT);

把 channel 注册到 selector 上,如此,一个 selector 可以管理多个 channel。

selector.select(1000);

该方法功能就是阻塞直到该选择器中的通道所关注的事件就绪,最多阻塞 1000 毫秒,使得程序可以继续往下运行。

while(true){

while (it.hasNext()) {}

}

这样的循环结构,使得服务器不断的轮询是否有请求事件发生,如果有发生,则会获得这个请求中的 channel,并且往这个 channel 中读写数据。

handleInput 方法中,就是处理对应的请求。

客户端:

 

客户端代码和服务器端代码,原理是类似的。

上述例子中,先启动服务器端代码,然后启动客户端代码,就能跑起来。例子中,客户端发送任意字符到服务器端,服务器返回当前时间给客户端。

原创文章,转载请注明出处!http://www.javathings.top/java-nio实现网络通信/

About: wusq


发表评论

邮箱地址不会被公开。 必填项已用*标注