2011-10-28 37 views
1

您是否知道如果我不對套接字執行任何操作,如何保持套接字連接的活動? 我注意到,如果我的連接是在後臺,我不運行它,我得到這個:套接字編程的Java - 多少時間套接字連接是活着的?我該如何控制它?

java.net.SocketException: Connection reset by peer: socket write error 
    at java.net.SocketOutputStream.socketWrite0(Native Method) 
    at java.net.SocketOutputStream.socketWrite(Unknown Source) 
    at java.net.SocketOutputStream.write(Unknown Source) 
    at java.io.DataOutputStream.writeInt(Unknown Source) 

所以,我怎麼能控制連接將不經過一定空閒時間和多少時間後會丟失默認情況下會發生?

+0

重複http://stackoverflow.com/questions/1480236/does-a-tcp-socket-connection-have-a-keep-alive –

+0

@KlasLindbäck不,它不是。這裏的直接問題是重置。 – EJP

回答

2

此問題沒有通用解決方案。很可能是已決定重置/關閉TCP/IP連接的遠程服務器/服務。它如何以及爲何決定了特定於應用程序。需要應用程序特定的解決方案來防止它。

FWIW,SO_KEEP_ALIVE機制導致協議棧偶爾在空閒的TCP/IP連接上交換消息。如果您因端口重用而遇到NAT連接重置,這可能會有所幫助。相關的Java方法是Socket.setKeepAlive

+0

好的,謝謝,你有任何鏈接到你指定的機制我可以嘗試它,我在Ubuntu 10上運行我的服務器,如果這有幫助。 – Mulder

+0

任何方式來控制存活超時長度? – MeBigFatGuy

1

將連接復位:套接字寫錯誤

這通常是通過寫一個已經被同行關閉連接造成的。這是一個應用程序協議錯誤。在擔心連接壽命之前,您應該先調查一下。