我做了一个不可靠的无线网络进行一些试验用非常简陋的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