посчитать через протокол UDP количество потерянных пакетов

Вообще не понимаю как можно считать дейтаграммы, так как в этом коде все сообщения доходят до получателя и numberOfSentBytes всегда равно количеству принятых байт. и не нашел в классе UdpClient ничего что могло было бы связанно с отправкой дейтаграмм и потерей пакетов ...

UdpClient client = new UdpClient(8001);
string message = "Hello world!";
byte[] data = Encoding.UTF8.GetBytes(message);
int numberOfSentBytes = client.Send(data, data.Length);

...


Ответы (1 шт):

Автор решения: aepot

Контроль доставки в UDP отсутствует в протоколе. Все контроллирующие функции вы можете реализовать только своими силами.

Например вы можете нумеровать пакеты при передаче. 1,2,3,4,5... и с другой стороны то же самое. При чем в первом пакете можно указать количество передаваемых. Если вдруг получена последовательность 1,3,2,5 из 5. То значит 4 пакет потерялся, и можно попросить отправить его снова.

Да, кстати, порядок получения пакетов во времени может отличаться от порядка отправки, здесь тоже у UDP нет никаких гарантий.

Ну это я самый примитивный случай предположил. Прелесть отсутствия стандарта контроля доставки здесь в том, что у вас полная свобода творчества. Можно не только пакеты считать можно их заведомо отправлять в 2 раза больше, дублируя все данные дважды. Тогда потерей одного пакета можно будет вообще пренебречь. Я так эти идеи могу вечно генерировать.

→ Ссылка