2016-11-08 25 views
0

我以TIdTCPServer是由呼叫IdTCPServer1.Bindings.Add添加多個端口綁定模擬了同一臺PC上的多臺服務器創建德爾福測試服務器程序。這很好。如何模擬一個套接字錯誤

但我也想模擬斷開網絡連接錯誤應該返回一個套接字錯誤到客戶端的端口。我嘗試了Bindings.Delete這個端口,並嘗試了CloseSocket但沒有成功。關於如何通過禁用或刪除端口來模擬該錯誤的任何想法?

+0

我想你可以自由的服務器組件,但是這是一個相當骯髒的方式做到這一點。 –

+1

您可以通過不發送任何導致讀取超時,你可以通過與零超時設置SO_LINGER和關閉套接字導致連接復位,但你不能模擬電纜拉或路由器中斷。 – EJP

+1

當您想模擬網絡丟失或連接丟失時,設置防火牆規則以阻止端口或IP地址範圍。 – selbie

回答

0

我張貼這是一個評論,但現在,我想起來了,我beleive這是「最好的辦法」的回答(雖然可能不是你所希望看到的):

OS將「保護」你,以便在單臺機器上模擬網絡錯誤是一件接近不可能的事情。使用VM(虛擬機),您可以輕鬆完成此任務 - 使用VM作爲「客戶端」連接到您的服務器應用程序,然後在不發出任何警告的情況下關閉虛擬機(關閉虛擬機電源) - 發生網絡錯誤。

另外,實現用戶的土地TCP/IP協議通過原始套接字,繞過操作系統內核層...虛擬機很容易。

+0

我特意製作了這個程序,以避免運行不同的機器/虛擬機來測試多客戶端的工作流程。在我開始使用VM之前,我會研究其他選項。謝謝。 – user173399