2014-02-07 20 views
0

我有一個TCP客戶端通過網絡與運行在虛擬機上的服務器通信,現在虛擬機的客戶操作系統爲IBM OS 4690,主機操作系統爲Linux。TCP客戶端沒有得到來自虛擬機的Socket.Send的回覆

偶爾,在客戶端OS上運行的TCP服務器應用程序重新啓動。在重新啓動之前,似乎正確調用了套接字。

重新啓動後,當客戶端嘗試執行Socket.Send時,它不會收到來自服務器的響應。

如果服務器正在運行物理硬件,則客戶端能夠通過TCP錯誤10054檢測到連接重置。當服務器在虛擬機上運行時,不會顯示此消息。

+0

你可以在客戶機上運行tcpdump或[Wireshark](http://www.wireshark.org/)(也許你的意思是.NET'System.Net.Sockets.Socket.Send'?),以便你可以觀察更多細節發生了什麼? – nodakai

回答

0

您的TCP客戶端應該準備好根本不會回答發送請求。想象一下當TCP客戶端發送數據並且服務器機器突然重新啓動(或失去能力)的情況。客戶端應用程序不會得到任何TCP RST標誌(錯誤10054)。

例如,您可以添加重新傳輸邏輯您的應用程序協議來處理這種情況。 它可以是這樣的:

    - 客戶端發送數據
    - 如果預定時間或連接不響應關閉 - 重複請求(數據發送)。
    - 如果嘗試次數超過某個值(如5),則聲明服務器不可用。
相關問題