Я пытался передать файлы через TCP \ IP на клиенте windows на сервер Linux. Это было серьезной проблемой в течение последних нескольких дней из-за непонимания того, почему последний пакет не получен на стороне сервера, что тормозит запись файла.
Я хочу добиться загрузки изображения (JPG, PNG), программы (EXE) и т. д.
Вывод
Client
lltoa(size.QuadPart,container,10);
//Send file size
send(sock, container, sizeof(container), 0);
bzero(container,1024);
//End of file size
unsigned __int64 uiPos = 0;
unsigned __int64 uiRemaining = ul.QuadPart;
while (uiRemaining > 0)
{
ul.QuadPart = uiPos;
ov.Offset = ul.LowPart;
ov.OffsetHigh = ul.HighPart;
DWORD dwNumToSend = (uiRemaining
Server
file_size = atoi(response);
printf("File size: %lli \n",file_size);
bzero(response,18384);
//End of file size
//First packet of file
len = recv(client_socket,response,sizeof(response) 0)
{
//Start getting the file
fwrite(response,1,len,new_file);
bzero(response,18384);
len = recv(client_socket,response,((file_size <= 1024) || (len < 1024))?file_size:sizeof(response),MSG_WAITALL);
printf("Received: %i\t|",len);
if(len <= 0)
{
break;
}
//Check if this is the last packet
file_size = file_size - len;
printf("Response #%i\tbytes_received: %i\tbytes remain:%li \n",counter,len,file_size);
counter += 1;
}
if(file_size > 0)
{
printf("\t\t\tError downloading file! bytes left:%li \n",file_size);
}
else
{
printf("Successfully downloaded file! \n");
}
fclose(new_file);
goto jump;
With error handeling for recv():
введите описание изображения здесь Если требуется больше кода на стороне сервера, прокомментируйте ... Я думаю, что это подойдет ...
Спасибо !!