Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 套接字的连接和读取超时之间有什么区别?_Java_Sockets_Timeout_Connection - Fatal编程技术网

Java 套接字的连接和读取超时之间有什么区别?

Java 套接字的连接和读取超时之间有什么区别?,java,sockets,timeout,connection,Java,Sockets,Timeout,Connection,3个问题: 套接字的连接和读取超时之间有什么区别 连接超时设置为“无限”意味着什么?在什么情况下它可以保持在不定式循环中?什么能触发无限循环死亡 读取超时设置为“无限”意味着什么?在什么情况下它可以保持在不定式循环中?什么能触发无限循环死亡 套接字的连接和读取超时之间有什么区别 连接超时是进行初始连接时的超时;i、 e.完成TCP连接握手。读取超时是等待读取数据1的超时。如果在客户端发出socketread调用后,服务器(或网络)无法在几秒钟内发送任何数据,则会引发读取超时错误 连接超时设置为“

3个问题:

  • 套接字的连接读取超时之间有什么区别

  • 连接超时设置为“无限”意味着什么?在什么情况下它可以保持在不定式循环中?什么能触发无限循环死亡

  • 读取超时设置为“无限”意味着什么?在什么情况下它可以保持在不定式循环中?什么能触发无限循环死亡

  • 套接字的连接和读取超时之间有什么区别
  • 连接超时是进行初始连接时的超时;i、 e.完成TCP连接握手。读取超时是等待读取数据1的超时。如果在客户端发出socket
    read
    调用后,服务器(或网络)无法在几秒钟内发送任何数据,则会引发读取超时错误

  • 连接超时设置为“无限”意味着什么?在什么情况下它可以保持在不定式循环中?什么能触发无限循环死亡
  • 这意味着连接尝试可能永远阻塞。不存在无限循环,但是可以通过关闭套接字的另一个线程解除连接尝试的阻止。(一个
    Thread.interrupt()
    调用也可以完成这个任务……不确定。)

  • 读取超时设置为“无限”意味着什么?在什么情况下它可以保持在无限循环中?什么可以触发无限循环结束
  • 这意味着对套接字流上的
    read
    的调用可能会永远阻塞。同样,没有无限循环,但是
    读取
    可以通过
    线程中断()来解除阻塞,关闭套接字,当然还有另一端发送数据或关闭连接



    1-它不是。。。正如一位评论家所想。。。套接字可以打开或空闲多长时间的超时。

    这些是JVM为建立TCP连接和等待从套接字读取数据而强制执行的超时值


    如果该值设置为无穷大,则不会永远等待。这仅仅意味着JVM没有超时,操作系统将负责所有超时。然而,操作系统上的超时时间可能很长。在一些慢速网络上,我看到超时长达6分钟

    即使为套接字设置了超时值,如果超时发生在本机代码中,它也可能不起作用。我们可以通过连接到防火墙阻止的主机或拔下交换机上的电缆,在Linux上重现这个问题


    处理TCP超时的唯一安全方法是在另一个线程中运行连接代码,并在时间过长时中断该线程。

    “如果该值设置为无穷大,您将不会永远等待。”只要不是讨论“无穷大”的含义,您肯定会等待很长时间。我们这里有一个案例,其中一个
    HttpURLConnection.getResponseCode()
    挂起等待apprx。一周后我们重新开始这个过程。显然,JVM端没有设置超时,Linux操作系统端也没有设置超时。最后一段是不正确的。连接最多在大约一分钟后超时。完全不需要单独的线程。如果没有数据,您当然可以让读取永远运行。但是Javadoc错误地认为默认连接超时是无限的。不是的。@comeGetSome这是不对的。您可以关闭套接字以进行输入。这将导致被阻止的读取遇到流结束。@comeGetSome:我必须使用一个线程来实现这一点,该线程包含对打开的HTTP URL连接的引用。当该线程关闭连接时,另一个线程抛出“java.net.SocketException:socketclosed”。感谢bug JDK-8075484让我这么做@comeGetSome您当然可以在不握住手的情况下调用Socket.shutdownInput()
    ?注意:这些超时是由TCP而不是JVM强制执行的。