Alexeytur
@Alexeytur

Почему UdpClient.Reсeive() не теряет пакеты?

У меня имеется приложение-сервер, которое в бесконечном цикле генерируется случайные числа, которые отправляются через UdpClient.Send() на широковещательный групповой адрес.
Есть приложение-клиент, которое в также в бесконечном цикле с помощью UdpClient.Reсeive() принимает пакеты. Пока всё нормально. Теперь я хочу сымитировать потерю пакетов - перед UdpClient.Reсeive() ставлю Thread.Sleep(1000). Но потери не происходит - после слипа клиент получает следующий по порядку отправления пакет, как будто слипа и не было, а пакеты хранились где-то в промежуточном месте. Мало того, даже если завершить сервер, то клиент продолжит получать откуда-то пакеты, пока не получит все, отправленные сервером.
В чем проблема?
  • Вопрос задан
  • 289 просмотров
Решения вопроса 1
@Sumor
У UdpClient есть буфер, в который складываются полученные данные.
Размер его доступен (get set) в свойстве ReceiveBufferSize.
Если данные приходят, а вы их не прочитали, то данные по кругу затираются - то есть происходит потеря пакетов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы