피어가 다른 피어에서 파일을 보내고 다운로드 할 수있는 분산 P2P 파일 공유 시스템을 구현하려고합니다. 그러나 파일을 다운로드하여 디렉토리에 저장하는 데 문제가 있습니다. 나는, 나는 내가 C에 새로운 오전,하지만 난이 문제를 알고C : 소켓을 통해 파일 보내기 및 받기
while(recv(clientSock, currentLinePointer, 1, 0) != 0) {
currentLinePointer++;
}
를 다음을 수행 다운로드하려고하면 내가 요청 된 파일
while(!feof(requestedfile)) {
bytes_read = fread(buf, 1, sizeof(buf), requestedfile);
send(clientSock, buf, bytes_read, 0);
}
를 보낼 경우 여기
입니다
- 어떻게하면보다 효율적인 읽기를 수행 할 수 있습니까? 한 번에 1024 바이트를 읽으면 마지막 데이터 블록에서 1024 바이트 만 채워질 수 있습니다. 다른 512 개의 무의미한 바이트로 인해 파일에 오류가 발생합니까? (말도 안되는 바이트로 jpg를 읽고 저장하려고하면 사진에 나쁜 일이 일어납니다.)
- 이제 파일을 읽었습니까? 어떻게 파일을 저장합니까? 피어 요청 "hello.jpg"라고 말하십시오. 지금 보내고 그 파일을 읽을 수 있지만,이 설정은 어떻게 요청 동료 디렉토리에이 파일을 저장할 수 있습니다 "PATH는/사진 /"
'recv'는 실제로 수신 된 바이트 수를 반환한다는 것을 기억하십시오. 오류가 발생하면 -1, 연결이 닫히면 0이 반환됩니다. 소켓을 비 블로킹하는 데 도움이 될 수 있습니다. –
"올바른"폴더에 저장하는 경우 송신 프로그램이 경로를 먼저 보내거나 수신 프로그램에 설정되도록 프로토콜을 수정하십시오. –
양쪽 끝에서 sendfile (2)을 사용하는 것이 더 효율적일 것입니다. (http : //linux.die.net/man/2/sendfile) –