2013-04-16 1 views
1

TCP 소켓을 통해 통신하는 두 개의 응용 프로그램이 있습니다. 첫 번째는 수신하고 두 번째는 전송합니다. 내가 응용 프로그램을 실행할 때TCP 전송 시간

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

(끝 스타트) 150 ~ 200 밀리 초입니다 (항상)

두 번째 응용 프로그램 :.

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

내가 응용 프로그램을 (실행하면 최종 시작)은 0.00 msecs입니다. (항상)

메시지 페이로드는 거의 200-300 바이트이고 핑 기간은 < 1ms입니다. 그래서, 왜 송신기가 기다리지 않는 동안 수신기가 200ms를 기다리는가? 그래서 어떻게 200msec를 설명 할 수 있습니까?

감사합니다.

답변

1

보낸 사람이 준비가되었을 때마다 메시지를 보냅니다. 수신자는 메시지를 기다려야하며,이 여분의 시간이 올 수있는 곳입니다. 메시지를 보낸 후에 recv()가 호출되는지 어떻게 확인합니까? 그렇게하지 않으면 recv()가 입력을 기다리는 중일 가능성이 높습니다. 보낸 사람은 아직이 코드 부분에 도달하지 않습니다.

다른 방법은 사용하는 방법에 따라 보낸 사람이 버퍼에 메시지를 저장하는 것입니다. TCP는 더 많은 데이터가 단일 패키지로 결합되기를 기다릴 수 있기 때문입니다. 이를 피하려면 TCP_NODELAY 옵션을 사용해야합니다.

+0

감사합니다. tcp_nodelay.i가 내 가상을 편집하려고 시도합니다. 'while'에서 반복되므로 수신자가 새 메시지를 기다리는 동안 메시지를 보내거나 준비 중입니다. – xyzt