java - 如何在阻塞模式 NIO 中实现超时?

标签 java sockets networking io nio

我没有使用任何选择器或类似的东西。我只有一个简单的ServerSocketChannel 监听和一个以阻塞模式连接到它的SocketChannel。我想对连接施加超时,但 SocketChannel.socket().setSoTimeout() 不起作用。

我尝试让后台线程 hibernate 30 秒并检查变量是否仍为 null(因为它会阻塞等待读入该变量)但我无法在我无法访问匿名类中的局部变量。

还有其他方法可以做到这一点吗?

更新:我的问题措辞有误。我还希望读取操作以及连接本身超时。

最佳答案

setSoTimeout() 设置读取超时,而不是连接超时,并且出于某种原因它在 SocketChannels 上根本不起作用,即使在阻塞模式下也是如此,并且即使是包装流。

您正在寻找的方法是带有两个参数的 channel.socket().connect()

关于java - 如何在阻塞模式 NIO 中实现超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15120369/

相关文章:

c - 用 C 编写非常简单的网络服务器 - 浏览器挂起

networking - Selenium/webdriver 网络监控

java - 测试 Alfresco Java 服务

java - 身份验证流程中 grant_type=client_credentials 和 grant_type=password 之间的区别?

.net - 如何断开 TcpClient 以允许新连接?

c - 一台服务器绑定(bind)不同的端口

networking - Golang DNS 解析不起作用

java - 谁能帮我解决java中的 "tostring"方法?

java - 是否可以在包含多种监听器类型的 Java 中创建我自己的事件监听器列表?

java - 为什么不尝试 I/O 就不可能检测到 TCP 套接字已被对等方优雅地关闭?