我编写了一个应用程序(称为M2),它读取到达一个端口的数据,对其进行处理,然后将结果发送到另一个端口。
如果我选择将数据发送到193.168.1.101:5001,一切正常。
如果我发送到192.168.1.101:5001它没有。为什么要更改IP地址的第一个字节会有什么不同?
更改的原因是,当我将数据包传输到193.168.1.101:5001时,它需要大约一毫秒,但是当我传输到192.168.1.101:5001时,它需要一秒钟。这个千倍的时间变化会扰乱我程序中的所有其他内容 - 特别是读者饥饿,我开始丢失输入数据包。
什么会导致传输时间发生如此剧烈的变化?请注意,传输不会失败,只需要很长时间。
答案 0 :(得分:0)
与193.168.1.101:5001(约1毫秒)相比,地址192.168.1.101:5001非常慢(传输数据包约2秒)。由于发送器使用同步发送,输入缺乏CPU,因此输入数据包被丢弃。
我将输出发送器更改为异步操作,使用截止时间计时器来限制尝试传输数据包所花费的时间。这解决了输入饥饿问题。我使用了基于此的代码:http://www.boost.org/doc/libs/1_52_0/doc/html/boost_asio/example/timeouts/blocking_udp_client.cpp
我仍然很好奇为什么一个地址比另一个地址慢一千倍。坏地址与发送计算机位于同一子网(正确的术语?),所以可能与它有关吗?