java - SocketChannel 的超时不起作用

标签 java socketchannel

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

channel.socket().setSoTimeout(TIMEOUT);

但这行不通。还有其他解决办法吗?

最佳答案

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

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

从 wrappedChannel 读取会根据您设置的 socketTimeOut 超时。

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

相关文章:

java - Spring初始化绑定(bind)器

java - HttpSession 中的同步是否可行?

java - 如何区分pdf文件和非pdf文件?

java - 如何通过Spark submit传递外部参数

java - 通过 SocketChannel 读取(写入)的正确方法

Java switch case 未运行

Java:如何从 NIO Server 向所有 channel 发送消息

java.lang.Object 无法转换为 java.nio.channels.SocketChannel

写入 channel 后,Java Selector 在无限循环中返回带有 OP_READ 的 SelectionKey,没有数据

java - SelectionKey iterator.remove() 抛出 UnsupportedOperationException 和无限循环