2010-07-08 4 views
2

보낸 패킷이 다른 쪽 끝에서 수신 될 때까지 winsock의 send 함수 블록을 사용할 수 있습니까?winsock의 send 함수 블록을 가지고 있습니까?

내 최종 목표는 동일한 연결에서 작은 1kb 패킷을 보낼 수있는 동안 5-20MB 파일을 보낼 수있게하는 것입니다. 그래서 나는 수신기가 패킷을 수신 할 때까지 차단한다고 생각했다. 그렇게하면 다른 작은 패킷이 대기열에 넣어 져있어 큰 파일의 나머지가 전송 될 때까지 기다리지 않아도됩니다.

답변

0

아니요.이 작업을 수행 할 필요가 없습니다.

+0

큰 패킷을 보낸 다음 작은 패킷을 보내는 경우 tcp는 여전히 큰 패킷을 보내는 동안 작은 패킷을 보냅니 까? – user230821

+1

TCP는 단지 스트림입니다. 한 번의 send() 호출을 수행하면 다른 쪽에서 해당 데이터를 읽는 데 여러 번의 recv() 호출이 필요할 수 있습니다. 반대로 여러 개의 send() 호출을 병합하고 하나의 recv() 호출로 읽을 수 있습니다. "패킷"을 보내거나 패킷/메시지가 수신되면 응답을 받으려면 TCP 위에 자체 프로토콜을 만들어야합니다. – nos

+0

정말입니까? 나는 tcp의 요점이 당신을위한 그런 종류의 관리를한다고 생각했다. 나는 한 번에 여러 개의 패킷을 보내는 시간에 수신되었을 때 1로 병합됩니다. – user230821

0

나는 우리가이 일에 능통 할 지 확신하지 못한다. TCP 스트림에서 트래픽을 혼합하는 것은 어떤 목적도하지 않을 것이다. 정확히 무엇을해야 하는지를 설명 할 수 있는가. 무엇보다도, 우리는 결코 TCP에서 확신 할 수 없다. 다른 응용 프로그램이 실제로 pkt를 받았을 것입니다. (단지 TCP 버퍼에있을 수도 있습니다) ...

2

두 개의 별도 TCP 연결을 사용하십시오. 그들은 심지어 같은 호스트와 포트에 연결할 수 있습니다, 당신의 끝에있는 포트 번호는 다를 것입니다.

모든 네트워크에서 루프백이 아닌 정지 및 대기 핸드 셰이 킹이 비참하게 느립니다.

+0

또는 어쩌면 _n_ 별도의 연결 .. :) 그러나 여러 연결에 +1 – Default

1

당신은 당신이 크기를 전송하여 시작하면, 당신은 어떤 패키지에 속해있는 데이터를 다른 측면에서 추론 할 수 대신 패키지로

struct MyNetworkPackage { 
    int size; 
    char* data; 
}; 

을 크기를 보낼 수 있습니다.
나는 winsock을 this answer에 설명하려고 시도했다.

0

이전 패킷이 계속 전송되면 '전송'이 차단되는 것 같습니다.

관련 문제