我使用套接字在C#.NET中有一個客戶端服務器應用程序寫入器。爲什麼我的客戶端服務器套接字連接保持斷開連接
我經常收到日誌信息(比如約4每小時)說這句話的消息,
An existing connection was forcibly closed by the remote host
在這種情況下,這裏的錯誤是在「服務器」端存在的。
我決定使用wireshark來分析發生什麼,我得到了這個。沒有延遲,這一切都在幾秒鐘內發生。
Server > Client [PSH, ACK] Seq=55653 Ack=4472 Win=63940 Len=148
Client > Server [ACK] Seq=4472 Ack=55801 Win=4038 Len=0
Server > Client [PSH, ACK] Seq=55801 Ack=4472 Win=63940 Len=148
Client > Server [ACK] Seq=4472 Ack=55949 Win=4001 Len=0
Server > Client [PSH, ACK] Seq=55949 Ack=4472 Win=63940 Len=142
Client > Server [PSH, ACK] Seq=4472 Ack=55949 Win=4001 Len=31
Client > Server [RST, ACK] Seq=4503 Ack=55949 Win=0 Len=0
所以客戶端和服務器正在發送東西(PSH)和確認東西(ACK)之間的東西。突然之間RST正在發生。這根據維基百科是一個重置,並且這個重置對應於'我現在獲得的'現有連接是強行...'的消息。
雖然這是什麼意思?這是否意味着重置導致問題?我認爲答案是否定的,更有意義的是重置是問題的結果?即服務器端的套接字由於某種原因而死掉,客戶端會將復位發送給服務器以嘗試喚醒它。
想法?
那麼你說的第一段黑客對不對?不是那樣,但是一個好點。你提到發送'我現在完成'的命令。我會研究這一點,因爲我認爲這可能有幫助。但問題是我懷疑它沒有完成。它不應該關閉它的連接,如果是這樣,我希望看到其他類型的錯誤。 – peter 2010-06-23 03:27:31
我指的是黑客以及寫得不好(但合法)的客戶。只要你的服務器代碼能夠說明人們做錯了什麼(合法與否),除了知道你在給定端口上運行的東西的人之外,你沒有什麼可擔心的。至於你的客戶爲什麼重置連接(聽起來可能是這種情況,如果你的互聯網連接穩定),是否有可能觸發異常,使代碼離開你的使用區塊(你*正在使用塊,對吧?)和處理插座? – cHao 2010-06-23 04:57:09