#.net #sockets #udp
#.net #сокеты #udp
Вопрос:
Могут произойти две вещи:
- старые данные перезаписываются новыми с помощью некоторого алгоритма циклического перебора
- новые данные просто отбрасываются, оставляя старые данные в буферах
Или происходит что-то еще?
Редактировать:
Я бы действительно хотел получить некоторый практический опыт в этом, советы по TCP или просто предположения — вот что я также могу предоставить самому себе 🙂
Комментарии:
1. Зависит от того, что вам нужно, но если вам действительно нужна надежная передача, используйте TCP. Тестирование UDP через 10-15 переходов в Интернете дает очень-очень приблизительно потерю 1 пакета на каждые 100, и это всего лишь один пакет в секунду.
2. @Erik — транспортный поток редко используется таким образом — только в закрытых системах «сервер-телеприставка» и локальных сетях.
3. С другой стороны, я никогда не терял UDP-пакет в локальной сети. Тем не менее, это может произойти.
Ответ №1:
Новые пакеты начинают отбрасываться, как только буфер сокета заполняется.
Ответ №2:
Это также зависит от аппаратного буфера. Если он заполнен, пакет также просто игнорируется (= то же самое, как если бы он никогда не достиг устройства, и эквивалентно тому, как если бы программный буфер в стеке IP считывался недостаточно быстро). Оба буфера могут заполниться независимо. Другими словами, вы можете потерять дейтаграмму на двух уровнях.
Ответ №3:
Короткий ответ заключается в том, что вы потеряете некоторые UDP-пакеты. Я надеюсь, что вы выбрали UDP, потому что можете столкнуться с некоторой потерей данных. Если вы не можете, тогда TCP — это ответ.
(Вы можете либо просто потерять данные, и все будет в порядке, либо реализовать свой собственный протокол подтверждения для повторной отправки пакетов, но тогда TCP выглядит как ответ)