我想使用SocketChannel并对其读/写方法设置超时。我试图为拥有SocketChannel的Socket设置超时,如下所示:

channel.socket().setSoTimeout(TIMEOUT);

但这不起作用。还有其他解决方案吗?

最佳答案

根据此article,SocketChannel的读取操作不会超时,但是您可以通过另一种方式从 channel 读取来获得此效果。

SocketChannel socketChannel;
socketChannel.socket().setSocketTimeout(500);
InputStream inStream = socketChannel.socket().getInputStream();
ReadableByteChannel wrappedChannel = Channels.newChannel(inStream);

从包装的 channel 读取将根据您设置的socketTimeOut超时。

关于java - SocketChannel的超时不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2866557/

10-10 13:59