我正在寫一個TCP服務器/客戶端程序,並希望將文件從服務器發送到客戶端。這是我的代碼,無法發送文件。我使用recv()
和send()
發送文件。提前致謝。TCP客戶端/服務器發送/接收文件
客戶端:
char *location = "/home/kostas/Downloads/download.txt";
FILE *download = fopen(location, "w+");
if(download == NULL)
{
printf("Error\n");
fflush(stdout);
}
int transfer = 0;
memset(buffer, 0, 1024);
while((transfer = recv(connFd, buffer, 1024 , 0) > 0))
{
int write = fwrite(buffer, sizeof(char), transfer, download);
memset(buffer, 0, 1024);
if((transfer == 0) || (transfer != 1024))
{
break;
}
}
memset(buffer, 0, 1024);
if(read(connFd, buffer, sizeof(buffer)) < 0)
{
printf("Read error\n");
fflush(stdout);
}
服務器端:
//i get the filename by read/write
FILE *file = fopen(fileName, "r");
memset(buffer, 0, 1024);
int i = 0;
while((i = fread(buffer, sizeof(char), 1024, file)) < 0)
{
if(send(connFd, buffer, i, 0) < 0)
{
printf("Error\n");
fflush(stdout);
}
memset(buffer, 0, 1024);
}
我不知道我做錯了嗎?之後,我打算使用posix線程來實現文件傳輸。
再次檢查接收'while'循環,你放錯了一些括號。實際上,你在服務器的讀取循環中遇到同樣的問題。您可能需要檢查[此運算符優先級表](http://en.cppreference。COM/W/C /語言/ operator_precedence)。 –
donte告訴我i = fread ... <0.讓我檢查一下,但我認爲這是我的錯誤。 – KostasRim
我確實改變了它,但它仍然不起作用:/ – KostasRim