setSoTimeout的功能是什么以及如何工作?
我正在尝试自己学习Socket。我对Oracle网站上的文字感到有些困惑。我对此有一些疑问。在此先感谢您的明确解释。
公共无效setSoTimeout(int超时)引发SocketException
以指定的超时时间启用/禁用SO_TIMEOUT,以毫秒为单位。将此选项设置为非零超时后,与此套接字关联的
read()
调用InputStream
将仅在此时间量内阻塞。如果超时到期,java.net.SocketTimeoutException
则尽管Socket仍然有效,但将引发a。必须先启用该选项,然后才能执行阻止操作。超时必须大于0。零超时被解释为无限超时。
- 什么是SO_TIMEOUT?
- 套接字是连接的端点。如果我说
mySocket.setSoTimeout(2000);
这是否意味着我要在2000毫秒内阻止从服务器/客户端为此套接字读取任何输入,并且在此时间之后套接字已准备好读取数据?
超时到期是什么意思?
在阻止操作之前必须启用哪些选项?
无限超时意味着套接字不再读取?
回答:
该JavaDoc的解释非常好:
通过将此选项设置为非零超时,与此套接字关联的InputStream上的read()调用将仅在此时间量内阻塞。如果超时到期,则尽管Socket仍然有效,但将引发java.net.SocketTimeoutException。必须先启用该选项,然后才能执行阻止操作。超时必须大于0。零超时被解释为无限超时。
SO_TIMEOUT
是read()
通话将被阻止的超时时间。如果达到超时,将抛出java.net.SocketTimeoutException。如果要永久阻止,请将此选项设置为零(默认值),则read()
调用将一直阻止,直到可以读取至少1个字节为止。
以上是 setSoTimeout的功能是什么以及如何工作? 的全部内容, 来源链接: utcz.com/qa/429006.html