Серверная часть программы:
Код: Выделить всё
…………………………
//Получение данных
ret = recv(sock, szRecvBuff, 1024, 0);
……………………………………………
//Отправка файла
FILE *f;
char szBuff[4096];
int nSendSize;
f = fopen( "C:\\1.txt", "r+t" );
nSendSize = fread( szBuff, sizeof( char ), 4096, f );
int iCurrPos = 0;
while(nSendSize > 0)
{
ret = send(sock, &szBuff[iCurrPos], nSendSize, 0);
if(ret == 0)
break;
else
if(ret == SOCKET_ERROR)
{
//Произошла ошибка
MessageBox(0, "Send failed", "Error", 0);
break;
}
nSendSize -= ret;
iCurrPos += ret;
}
fclose( f );
Код: Выделить всё
………………….
strcpy(szMessage, "get");
strcpy(szServerName, "127.0.0.1");
sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
………………………………………
ret = send(sClient, szMessage, strlen(szMessage), 0);
………………………………………
//Получение файла
FILE *f;
char szBuff[4096];
int nSendSize = 20000; //Размер данных
int iCurrPos = 0;
f = fopen( "C:\\2.txt", "w+t" );
while(nSendSize > 0)
{
ret = recv(sClient, &szBuff[iCurrPos], nSendSize, 0);
fwrite( szBuff, sizeof( char ), ret, f );
if(ret == 0)
break;
else
if(ret == SOCKET_ERROR)
{
//Произошла ошибка
MessageBox(0, "Send failed1", "Error", 0);
break;
}
nSendSize -= ret;
iCurrPos += ret;
}
fclose( f );
closesocket(sClient);
Если файл полностью убирается в szBuff[4096], то проходит весь файл. Если нет, то обрезается размером szBuff[4096]. Что можно поправить в коде, что бы отправлять его по частям.
Использую MS Visual Studio.NET 2003.
Спасибо.