首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

nio 远程主机逼迫关闭了一个现有的连接 解决方案

2012-12-18 
nio远程主机强迫关闭了一个现有的连接 解决方案nio编程过程中会出现:Exception in thread main java.io.

nio 远程主机强迫关闭了一个现有的连接 解决方案

nio编程过程中会出现:

Exception in thread "main" java.io.IOException: 远程主机强迫关闭了一个现有的连接。at sun.nio.ch.SocketDispatcher.read0(Native Method)at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:25)at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:233)at sun.nio.ch.IOUtil.read(IOUtil.java:206)at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:207)at com.rb.socket.nio.server.n.NIOServer.handleKey(NIOServer.java:87)at com.rb.socket.nio.server.n.NIOServer.listen(NIOServer.java:57)at com.rb.socket.nio.server.n.NIOServer.main(NIOServer.java:122)

?

?

?

主要原因是:客户端自己关闭了连接(没有调用SocketChannel的close方法),服务器还在read事件中,这个时候读取客户端的时候会报错。

?

解决办法,在客户端合适的时候,调用SocketChannel的close方法,同时服务器读取事件增加如下逻辑:

count = client.read(receivebuffer);
???if(count==-1){
????System.out.println(count);
????client.close();
???} else {

如果服务器没有client.close,则一直System.out.println(count)

?

?

所以先客户端调用close,然后服务器在read事件里面读取返回是不是-1,如果是,调用服务器这边客户端的引用的close方法,这样两边的SocketChannel都关闭了。

热点排行