Потеря и исправление пакетов TCP / IP не работает в моем коде - PullRequest
0 голосов
/ 03 мая 2020

Насколько я понял, 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, он пытается прочитать, но не работает и зависает ...

1 Ответ

0 голосов
/ 04 мая 2020

Асинхронность не имеет отношения к вопросу. Огуз Озгул прав. зацикливание, пока я не получу полные 1024 байта, решило проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...