Я пишу небольшое клиент-серверное приложение на c ++ с winsock, и я не могу объяснить несколько вещей, которые происходят .. Я написал 2 основные функции, которые отправляют / получают все данные через TCP-соединение ..
bool sending(SOCKET source, char* buff, int size, int flags = 0)
{
int sent = 0;
int totalst = 0;
int total = size;
while(totalst != total)
{
sent = send(source, buff+totalst, size-totalst, flags);
if(sent > 0)
{
totalst += sent;
}
if(sent == SOCKET_ERROR)
{
return false;
}
}
return true;
}
bool receive(SOCKET source, char* buff, int size, int flags = 0)
{
int rec = 0;
int totalrc = 0;
int total = size;
while(totalrc != total)
{
rec = recv(source, buff+totalrc, size-totalrc, flags);
if(rec > 0)
{
totalrc += rec;
}
if(rec == SOCKET_ERROR)
{
return false;
}
}
return true;
}
Сервер отправляет целое число, которое содержит размер блока данных, который будет следовать за ним. Этот размер блока данных в моем случае не должен изменяться, он всегда должен быть 92600 байт, ноиногда клиент получает 92604 байта вместо этого.Странно то, что если я заставляю сервер ждать после отправки размера bock и самого блока (с Sleep), он всегда отправляет то, что я ожидал ..
int i=0;
while(i < 100)
{
i++;
dat = getData();
len = sizeof(dat);
sending(source, (char*)&len, sizeof(len));
sending(source, dat, len);
Sleep(200);
}
Может ли быть так, что клиент получаетневерное значение байтов из-за задержки?Есть ли способ исправить это?Любая помощь приветствуется!