1

我有两个应用程序通过 TCP 套接字进行通信。第一个接收,第二个发送。

First app:
start=clock();
recv();
end=clock();

当我运行应用程序时,(结束-开始)是 150-200 毫秒。(总是)

第二个应用:

while (!stop) {
    start=clock();
    prepare_message();
    send();
    end=clock();
}

当我运行应用程序时,(结束-开始)为 0.00 毫秒。(总是)

消息负载接近 200-300 字节,ping 持续时间 <1ms。那么,为什么接收方等待 200ms 而发送方不等待呢?那么我该如何描述 200 毫秒呢?

谢谢

4

1 回答 1

1

发送者在消息准备就绪时发送消息。接收者必须等待消息,这就是额外时间的来源。您如何确保在发送消息后调用 recv() ?如果你不这样做,那么 recv() 很可能正在等待输入,而发送者还没有到达这部分代码。

另一件事是,根据您使用的方法,发送方仅将消息保存在缓冲区中,因为 TCP 可以等待更多数据将其合并到一个包中。您应该使用TCP_NODELAY选项来避免这种情况。

于 2013-04-16T06:30:08.093 回答