2012-01-13 59 views
3

我有一种情况,我有多个服务器的多个连接,我希望为此使用NIO。如何检测NIO通道上的连接错误

选择器会告诉我什么时候有数据需要读取。有什么方法可以知道连接何时不再连接?也许当写入失败或通过捕获在某些操作中引发的异常时? 我需要这样做是非阻塞的,我想这样做的方式是,如果连接失败,可以重新建立通道(即建立到同一服务器的新通道)。

回答

3

你会得到读/写的例外。在其他时候,如果频道注册了选择器的读/写兴趣,当频道中断时,select()将返回,并且频道的选择键将指示可读/可写。在下次读取/写入时会遇到异常。

+0

谢谢!这似乎也是它的工作方式,也是连接失败的原因,所以读/写也是有意义的。 – jbx 2012-01-16 21:43:54

+1

*当通道断开时,select()将返回,并且通道的选择键将指示可读/可写*,但这不是真的,当我从SocketChannel读取数据时,电缆被拔出,'select() '一直返回** 0 **,频道将永远不会再次被选中。如果我读取或写入通道忽略其可读/写状态,read()不会返回** - 1 **,它会一直返回** 0 **,并且write()不会抛出异常。目前我发现无法检测套接字断开,有人给我一个线索? – neevek 2012-12-23 04:59:24

+0

@neevek你有没有解决这个问题? – 2015-08-26 13:04:03