小编Sha*_*Lee的帖子

什么原因:java.net.SocketException:连接超时,而不是SocketTimeoutException

此SocketException在ObjectInputStream.readObject()方法中引发,这是什么原因引起的呢?此外,客户端和服务器套接字的soTimeout值均为0,而KeepAlive值为false。

{2012-01-09 17:44:13,908} ERROR java.net.SocketException: Connection timed out
 at java.net.SocketInputStream.socketRead0(Native Method)
 at java.net.SocketInputStream.read(SocketInputStream.java:146)
 at sun.security.ssl.InputRecord.readFully(InputRecord.java:312)
 at sun.security.ssl.InputRecord.read(InputRecord.java:350)
 at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:809)
 at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:766)
 at sun.security.ssl.AppInputStream.read(AppInputStream.java:94)
 at sun.security.ssl.AppInputStream.read(AppInputStream.java:69)
 at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2265)
 at java.io.ObjectInputStream$BlockDataInputStream.peek(ObjectInputStream.java:2558)
 at    java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2568)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1314)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
Run Code Online (Sandbox Code Playgroud)

从有关setSoTimeout方法的JAVA API文档中,如果此方法设置为非零值,则当时间到期时,仅引发SocketTimeoutException,而不引发SocketException:Connection超时,因此,此异常不应与setSotimeoutMethod相关。

public void setSoTimeout(int timeout)  throws SocketException
 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. If the timeout …
Run Code Online (Sandbox Code Playgroud)

sockets objectinputstream

6
推荐指数
1
解决办法
3万
查看次数

标签 统计

objectinputstream ×1

sockets ×1