2014-01-31 3 views
0

최근에 winsock API를 사용하여 작업 한 결과 보낸 사람의 버퍼 크기를 늘리고 사용되지 않은 바이트를 0으로 채우는 경우 수신자는 파일 끝에 해당 0을 추가한다는 것을 발견했습니다. 내가 사용하는 응용 프로그램 버퍼가 더 많다면, 다른 끝에서받는 파일이 손상된 것처럼 보이고 0을 추가하기 때문에 명백 해 보인다. 그러나 그것은 2048, 1024의 버퍼로 잘 작동했으며,이 경우에는 보내기 전에 0이 너무 추가되었습니다. 어떻게 한 사람이 타락하고 다른 사람이 아닌가?Winsock TCP 응용 프로그램 버퍼

답변

1

송신자의 버퍼 크기를 늘리고 사용되지 않은 바이트를 0으로 채우면 수신자는 파일 끝에 해당 0을 추가합니다.

따라서 바이트는 전혀 사용되지 않았습니다. 너는 그들을 보냈다. send 함수 호출에서 잘못된 개수를 사용했습니다.

내가 사용하는 응용 프로그램 버퍼가 더 많으면 3072에 다른 끝에서받는 파일이 손상된 것으로 보이며 0을 추가하기 때문에 명백해 보입니다.

수정.

그러나 2048, 1024 버퍼로 정상적으로 작동하고 이러한 경우 송신하기 전에 0이 너무 추가되었습니다. 어떻게 한 사람이 타락하고 다른 사람이 아닌가?

코드에 더 큰 버퍼 크기로만 노출 된 버그가 있기 때문에. 아마 당신이 보낸 파일은 2048 바이트의 배수이므로 파일 끝 버그는 노출되지 않았습니다.

코드를 보지 않고는 확신 할 수 없지만 파일에서 읽고 'count'바이트를 보내는 대신 전체 버퍼를 보낼 때 반환되는 카운트는 무시할 가능성이 큽니다. 이것은 파일의 끝에서 실패하지만 읽지 않은 다른 시간에는 실패 할 수도 있습니다. 그렇지 않은 경우 버퍼를 채우지 않습니다.

관련 문제