2013-04-16 50 views
1

我有两个应用程序通过TCP套接字进行通信。第一个接收和第二个发送。TCP传输持续时间

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

当我运行该应用程序,(端开始)是150-200毫秒(总是)

第二APP:

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

当运行应用程序时,(最终开始)是0.00毫秒。 (总是)

消息有效负载将近200-300字节,ping持续时间为< 1ms。那么,为什么接收者等待200毫秒,而发送者不等呢? 那么我怎样才能描述200msecs?

谢谢

回答

1

发送者发送消息时,它准备好了。接收方必须等待消息,这是额外时间可能来自的地方。如何确保在邮件发送后调用recv()?如果你不这样做,那么recv()很可能在等待输入,而发送者尚未到达这部分代码。

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

+0

谢谢,我会尝试tcp_nodelay.i已编辑我的伪。它在'while'中循环,因此当接收者正在等待新消息时它正在发送或准备消息。 – xyzt