gpt4 book ai didi

java - 套接字和 setSoTimeout()

转载 作者:行者123 更新时间:2023-12-01 18:13:49 26 4
gpt4 key购买 nike

我对 socket.setSoTimeout( int ) 方法很困惑。

在我打电话的情况下

 socket.setSoTimeout(4000);
try{
string data = input.read();

}catch (InterruptedIOException e) {

}

当调用 setSoTimeout() 时,它是否会暂停 sokcet 并在 4000 毫秒后恢复?或者它会完全阻止从套接字读取所有内容,并且如果在 setSoTimeout 仍处于 Activity 状态时尝试从套接字读取任何内容,则会抛出异常?

如果是最新的,为什么这有用?根据文档,超时后会自动抛出异常。

感谢您的澄清。

最佳答案

Socket.setSoTimeout() 文档的关键部分是:

Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds. With this option set to a non-zero timeout, a read() call on the InputStream associated with this Socket will block for only this amount of time.

这意味着套接字上的读取将被阻止阻塞超过指定时间(根据“超时”的含义进行解释时可能会更清楚,如果您熟悉的话肯定会更清楚与系统级套接字接口(interface))。它并没有说保证读取会阻塞那么长时间,这确实是有问题的实用性。

通过设置超时解决的问题之一是处理不完全断开连接而不关闭连接的客户端。本地计算机无法检测到这种情况已经发生,因此如果没有超时,尝试从连接到此类客户端的套接字读取数据将无限期地阻塞。

关于java - 套接字和 setSoTimeout(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60410875/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com