지금 바로 보내고있어 문제가 관련되어 예상 수신하지 :RECV() 바이트 수
int k = send(hAccepted, p, size, 0);
'P'는 일부 파일, MP3, 텍스트 파일 또는 무엇 당신이를 포함하는 버퍼이다 . 문제는 해당 파일이 '5,000,000'바이트라고 말하면, 수신 측에서 5,000,000 바이트를 모두받지 못한 경우에도 send()는 호출 될 때마다 5,000,000을 반환합니다. 이것은 클라이언트가 전체 파일을받지 못했다는 것을 완전히 알고 있기 때문에 서버 측에서 디버깅하는 것을 매우 어렵게 만들고 있지만, 서버는 모든 것을 전송했다고 확신합니다.
어떻게 소켓을 열었습니까? TCP를 사용한다면 상대방이 내용을받지 않고'send'를 완료해서는 안됩니다 (성공적으로). UDP를 사용한다면 수신 한 데이터의 양을 "알려주는"코드를 수신 측에 추가해야합니다. –
모두 TCP입니다. 클라이언트로 보내지는 첫 번째 것은 바이트 단위의 파일 크기 (정확하게 전송 됨)입니다. 클라이언트는 파일을 수신 할 수있는 크기의 버퍼를 설정 한 다음 send/recv를 다시 호출합니다. 항상 전체 파일이 전송되었다는 것을 반환하고, recv는 매번 다른 수를 얻습니다. –
@Yelnik 어떻게 데이터를 수신합니까? TCP를 사용하면 1 개의 send() 호출 결과를 받기 위해 여러 번 전화를받을 수 있습니다. – nos