在不同计算机上使用相同端口的错误

时间:2015-11-20 16:35:13

标签: c++ sockets boost boost-asio

我编写了一个应用程序(称为M2),它读取到达一个端口的数据,对其进行处理,然后将结果发送到另一个端口。

如果我选择将数据发送到193.168.1.101:5001,一切正常。

如果我发送到192.168.1.101:5001它没有。为什么要更改IP地址的第一个字节会有什么不同?

更改的原因是,当我将数据包传输到193.168.1.101:5001时,它需要大约一毫秒,但是当我传输到192.168.1.101:5001时,它需要一秒钟。这个千倍的时间变化会扰乱我程序中的所有其他内容 - 特别是读者饥饿,我开始丢失输入数据包。

什么会导致传输时间发生如此剧烈的变化?请注意,传输不会失败,只需要很长时间。

1 个答案:

答案 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

我仍然很好奇为什么一个地址比另一个地址慢一千倍。坏地址与发送计算机位于同一子网(正确的术语?),所以可能与它有关吗?

相关问题