Async BeginSend / EndSend отправляет не так много данных, как указано

#.net #sockets

#.net #сокеты

Вопрос:

У меня есть встроенное устройство, с которым я играю; Отправка некоторых данных с ПК. В случае со встроенным устройством я говорю не о WindowsCE / Linux, а о микроконтроллере с дрянным стеком TCP-IP и несколькими КБ оперативной памяти.

Проблема возникает, когда я пытаюсь отправить несколько пакетов и в конечном итоге заливаю драйвер устройства.

В чем проблема?

BeginSend и EndSend на ПК работают без ошибок, и общая длина данных, отправленных в BeginSend, совпадает с длиной возвращаемой конечной отправки. Но проверка количества данных [байт?] отправка с помощью Wireshark показывает, что пакетов не так много, как должно быть, и эта разница составляет несколько КБ. Итак, BeginSend и EndSend работают так, как если бы они завершились, но на самом деле это не так.

Я попытался переключить сокет.NoDelay но, похоже, это не работает. Даже если я установил сокет.NoDelay = true, отправляются пакеты большего размера, поэтому похоже, что это не имеет никакого эффекта.

Я, конечно, использую TCP-сокеты.

Отправка такого количества данных с веб-сервера (IIS) работает нормально.

Есть ли какие-либо проблемы, о которых я должен знать?

Комментарии:

1. Почему вы говорите об ожидаемом количестве пакетов? Количество используемых пакетов может варьироваться при использовании TCP.

Ответ №1:

У меня встроенное устройство, и я играю, отправляя некоторые данные с ПК. Со встроенным устройством я говорю не о WindowsCE / Linux, а о микроконтроллере с дрянным стеком TCP-IP и несколькими КБ оперативной памяти.

Отправляете ли вы из.Сетевое приложение для этого устройства?

BeginSend и EndSend на ПК работают без ошибок, и общая длина данных, отправленных в BeginSend, совпадает с общей длиной возвращаемой конечной отправки. Но проверка количества отправленных данных с помощью Wireshark показывает, что пакетов не так много, как должно быть, и эта разница составляет несколько КБ.

Как вы пришли к такому выводу?

Отправка такого количества данных с веб-сервера (IIS) работает нормально.

Пожалуйста, уточните, что вы имеете в виду? Отправляете ли вы через HTTP на встроенное устройство, и это работает?

Есть ли какая-либо проблема, о которой я должен знать?

В чем проблема? Встроенное устройство не получает все? Если да, то как вы пришли к такому выводу?