Насколько я понял, tcp / ip должен исправлять пакеты. Но похоже, что это не так в моем приложении. У меня есть сервер в C ++ и клиент в C#. Потери пакетов случаются довольно часто. Я посылаю данные в c ++ как
int sentBytes = send(client_, &tempBuffer[0], 1024, 0);
, и когда я распечатываю sentBytes
, я всегда получаю 1024. Я получаю это в C# как
int numBytes = 0;
Byte footer = Convert.ToByte('c');
while (footer != Convert.ToByte('e'))
{
int readBytes = 0;
while (readBytes < 1024)
{
int readThisLoop = _stream.Read(_buffer, numBytes, 1024);
readBytes += readThisLoop;
if (readThisLoop != 1024)
{
throw new RsuTcpConnectionException("cannot read data");
return 0;
}
}
footer = _buffer[numBytes + 1024 - FooterSize];
numBytes += readBytes - FooterSize;
}
Я часто не t 1024 байта в вызове Read
. Если это нормально, как я могу правильно читать? Если я просто удаляю блок if
, он пытается прочитать, но не работает и зависает ...