2010-11-07 99 views
4

我想模擬一個套接字連接變壞,以測試我的應用程序。我們的目標是驗證我的Java代碼是否按照預期的方式運行,當與遠程服務器的長期套接字連接在運行時重置或服務器不可用時。模擬Windows 7上的套接字連接重置/超時

我試過在Windows防火牆中創建防火牆規則。但是,啓用規則似乎不會影響已打開的套接字連接。拉網線不是一種選擇,因爲我必須通過與運行我的代碼的服務器的遠程桌面連接執行這些測試。

回答

0

這樣做的一個簡單,醜陋和危險的方法是快速禁用,然後通過VBScript和WMI啓用正確的NetworkAdapter

更強大的設置解決方案的難點在於使用WAN仿真器來模擬數據包丟失,斷開連接和高延遲。這裏最好的免費選擇是dummynet,雖然有很多昂貴的,用戶友好的解決方案。

如果有一種更簡單的方法可以在Windows和Linux中執行此操作,而無需使用帶有雙網卡的FreeBSD啓動光盤和虛擬服務器,我還希望聽到它!

+1

好主意,謝謝。但是,當我必須通過遠程桌面執行所有這些測試時,似乎這兩種方法都不起作用 – akirekadu 2010-11-09 16:35:56

1

我意識到這不是直接在Windows下,但考慮到Java的本質,它可能仍然有效。

在Linux下有一個名爲Netem的程序,考慮到你的代碼是java,可能會運行。我從來沒有使用它,所以我不能證明它的能力或使用,但有一些使用here的例子。你可以相當平凡地在虛擬機內部運行Linux(比如免費的(比如啤酒,或者像你在英國享受的那種言論自由的)VirtualBox),希望你的Java應用程序能夠在裏面運行。

可能不是完美的,而我們對此深感抱歉,普遍缺乏專業知識的,但它可能爲你需要

0

你可以殺了客戶端應用程序。

此外,您可以通過創建這是一個非常簡單的代理應用程序,它通常只是轉發數據,但你可以計劃給它指令做各種其他事情做。或者,如果出於某種原因,您不能殺死您的客戶端應用程序,則可以不用編程模擬丟棄的連接,而只需要殺死該代理應用程序。

0

設置套接字讀取超時編程到1毫秒,你總是會得到一個java.net.SocketTimeoutException。