Eka*_*ans 5 java network-programming
如果我设置套接字SoTimeout,并从中读取.当读取时间超过超时限制时,我将得到"SocketTimeoutException:read timed out".这是我案例中的堆栈:
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)
Run Code Online (Sandbox Code Playgroud)
但在这里我遇到了"IOExcetion:Connection timed out",我不知道它是怎么发生的.栈:
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)
Run Code Online (Sandbox Code Playgroud)
有人能告诉我两个例外之间的区别是什么,谢谢.
连接超时意味着您尝试连接到远程 IP/端口对但失败:它根本没有应答。该阶段的另一个可能的错误是连接被拒绝,其中该对可用但拒绝了您的连接尝试。这两个错误都出现在套接字的初始设置中。请注意,这些错误仅在 TCP 中发生,因为 TCP 连接需要建立会话。
当你出现socket读超时时,说明你已经连接了,但是未能及时读取数据。套接字上的超时是可配置的。您还可能会收到连接重置错误,这意味着您确实连接成功,但另一端认为毕竟您不值得:p
| 归档时间: |
|
| 查看次数: |
9889 次 |
| 最近记录: |