“java.io.IOException:连接超时”和“SocketTimeoutException:读取超时”之间有什么区别

2024-05-23

如果我设置一个套接字 SoTimeout,并从中读取。当读取时间超过超时限制时,我会收到“SocketTimeoutException:读取超时”。 这是我的例子中的堆栈:

java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:150)
    at java.net.SocketInputStream.read(SocketInputStream.java:121)
    at java.io.FilterInputStream.read(FilterInputStream.java:133)
    at org.apache.hadoop.ipc.Client$Connection$PingInputStream.read(Client.java:277)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:254)
    at java.io.DataInputStream.readInt(DataInputStream.java:387)
    at org.apache.hadoop.ipc.Client$Connection.receiveResponse(Client.java:527)
    at org.apache.hadoop.ipc.Client$Connection.run(Client.java:462)

但在这里我遇到了“IOExcetion:连接超时”,我不知道这是怎么发生的。 堆栈:

java.io.IOException: Connection timed out
    at sun.nio.ch.FileDispatcher.read0(Native Method)
    at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:21)
    at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:198)
    at sun.nio.ch.IOUtil.read(IOUtil.java:171)
    at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:245)
    at org.apache.hadoop.net.SocketInputStream$Reader.performIO(SocketInputStream.java:55)
    at org.apache.hadoop.net.SocketIOWithTimeout.doIO(SocketIOWithTimeout.java:142)
    at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:155)
    at org.apache.hadoop.net.SocketInputStream.read(SocketInputStream.java:128)
    at java.io.FilterInputStream.read(FilterInputStream.java:116)
    at org.apache.hadoop.ipc.Client$Connection$PingInputStream.read(Client.java:277)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
    at java.io.DataInputStream.readInt(DataInputStream.java:370)
    at org.apache.hadoop.ipc.Client$Connection.receiveResponse(Client.java:527)
    at org.apache.hadoop.ipc.Client$Connection.run(Client.java:462)

谁能告诉我这两个例外有什么区别,谢谢。


连接超时意味着您尝试连接到远程 IP/端口对但失败:它根本没有应答。该阶段的另一个可能的错误是连接被拒绝,其中该对可用但拒绝了您的连接尝试。这两个错误都出现在套接字的初始设置中。请注意,这些错误仅在 TCP 中发生,因为 TCP 连接需要建立会话。

当你有一个套接字读取超时时,这意味着你are已连接,但未能及时读取数据。套接字上的超时是可配置的。您还可能会收到连接重置错误,这意味着您确实连接成功,但另一端认为毕竟您不值得:p

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“java.io.IOException:连接超时”和“SocketTimeoutException:读取超时”之间有什么区别 的相关文章

随机推荐