SocketChannel的超时不起作用

use*_*171 15 java socketchannel

我想使用a SocketChannel和它的读/写方法超时.我试图设置一个拥有我SocketChannel喜欢的Socket的超时:

channel.socket().setSoTimeout(TIMEOUT);
Run Code Online (Sandbox Code Playgroud)

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

luk*_*uke 14

根据这篇文章,SocketChannel不会因读取操作而超时,但您可以通过另一种方式从通道读取来获得此效果.

SocketChannel socketChannel;
socketChannel.socket().setSocketTimeout(500);
InputStream inStream = socketChannel.socket().getInputStream();
ReadableByteChannel wrappedChannel = Channels.newChannel(inStream);
Run Code Online (Sandbox Code Playgroud)

从wrappedChannel读取将根据您设置的socketTimeOut超时.