我做了一個不可靠的無線網絡進行一些試驗用非常簡陋的Java Socket編程來傳輸郵件前後端節點之間(自家釀製的)。檢測TCP差在不可靠的網絡
的設置如下:
節點A ---中繼節點---節點B
的一個問題,我不斷地跑入現象的原因是連接滴出既不節點A或B知道該鏈接已經死亡,但仍然繼續傳輸數據。 TCP連接也不超時。我在心跳消息中添加了一段時間後會導致超時,但我仍然想知道TCP爲什麼不超時的根本原因。
下面是我設立一個插座時啓用的選項:
channel.socket().setKeepAlive(false);
channel.socket().setTrafficClass(0x08); // for max throughput
此行爲是奇怪的,因爲它比當我有一個有線網絡完全不同。在有線網絡中,我可以通過拔出以太網電纜來模擬斷開的連接,但是,一旦將電源線插回,連接就會重新建立,並且信息會再次通過。
在無線網絡中,連接不會重新建立,一旦它靜靜地死去,消息從來沒有恢復。
有一些其他未知的java implentation或設置,我可以使用,另外,爲什麼我看到擺在首位此行爲的插座?
是的,任何人說任何事之前,我知道,TCP是不是在不可靠的網絡的優先停留的選擇,但在這種情況下,我想,以確保沒有數據包丟失。
可能不可用,除非你想要某些平臺特定的,由於TCP實現的本質。 – WhirlWind 2010-05-17 19:28:56