我想實現一個基本的文件服務器。我一直在嘗試使用在這裏找到的sendfile命令:http://linux.die.net/man/2/sendfile我正在使用TCP。你會如何收到一個用'sendfile'發送的文件?
我可以讓它發送很好,但它的發送二進制,我不知道如果這是掛斷。
我試圖用recv來接收文件,但它沒有正確地通過。 是否有一種特殊的方式來接收一個二進制文件,並將其放入一個字符串?
編輯: 要求提供一些代碼,那就是:
SENDFILE呼叫(從服務器進程)
FILE * file = fopen(filename,"rb");
if (file != NULL)
{
/*FILE EXISITS*/
//Get file size (which is why we opened in binary)
fseek(file, 0L, SEEK_END);
int sz = ftell(file);
fseek(file,0L,SEEK_SET);
//Send the file
sendfile(fd,(int)file,0,sz);
//Cleanup
fclose(file);
}
收到呼叫(來自客戶端的過程,甚至超過一個循環基本的,只是想要一個單一的字母)
//recieve file
char fileBuffer[1000];
recv(sockfd,fileBuffer,1,0);
fprintf(stderr,"\nContents:\n");
fprintf(stderr,"%c",fileBuffer[0]);
編輯:寫了一些代碼來檢查返回值。 sendfile給errno 9 - 壞文件編號。我假設在我的第二個文件描述符中(我發送的文件)。我把它作爲一個整型,因爲sendfile抱怨它不是int。
我應該如何使用發送文件給定的文件指針代碼,我在上面的sendfile調用中使用過?
你能提供一些代碼,你的sendfile調用和你的recv循環嗎? –
總是檢查系統調用的返回值(fseek,sendfile,recv)。並將結果包含在您的問題中。 – Nemo