luigi_dipalo Ответов: 1

Потеря пакетов UDP


Привет,
У меня большая проблема:
Я посылаю UDP pkt с микро на ПК.
В ПКТ, который я посылаю, есть счетчик. Я посылаю 1кбайт ПКТ на частоте 100 Гц.
Когда я получаю ПКТ от ПК, я теряю часть ПКТ. Я вижу это, потому что я увеличиваю счетчик каждый раз, когда получаю один из них, и это число отличается от счетчика, который я посылаю. эта разница увеличивается постоянно.
У кого-нибудь есть какие-то проблемы? Как я могу ее решить?
Моя операционная система-Windows XP, и я использую Visual C++ 2010 Express.
Функция, которую я использую для получения pkt, - это recvfrom.

ely_bob

Вы уверены, что ваши системы совместимы с little/big endian?

1 Ответов

Рейтинг:
0

Sauro Viti

От Протокол Пользовательских Дейтаграмм[^]):

протокол UDP использует простую модель передачи без неявных диалогов рукопожатия для обеспечения надежности, упорядоченности или целостности данных. Таким образом, протокол UDP обеспечивает ненадежное обслуживание и датаграммы могут приходить не по порядку, дублироваться или пропадать без предупреждения. протокол UDP предполагается, что проверка и исправление ошибок либо не требуется, либо выполняется в приложении, что позволяет избежать накладных расходов на такую обработку на уровне сетевого интерфейса. Чувствительные ко времени приложения часто используют протокол UDP потому что отбрасывание пакетов предпочтительнее, чем ожидание отложенных пакетов, что может быть невозможно в системе реального времени. Если средства исправления ошибок необходимы на уровне сетевого интерфейса, приложение может использовать протокол управления передачей (TCP) или протокол передачи управления потоком (SCTP), которые предназначены для этой цели.

Имейте в виду, что Окна системы обычно не в состоянии обеспечить Задержки ввода-вывода меньше, чем несколько миллисекунд, и 100 Гц следует считать устойчивой частотой для стандартных приложений.

Что делать, сильно зависит от ваших требований; вы можете:


  • сделайте ваше приложение отказоустойчивым: это возможно только в том случае, если допустимо потерять какую-то дейтаграмму
  • измените протокол передачи, например, на TCP/IP: это требует реализации более сложного протокола на вашем микро, тогда это зависит от его ресурсов и от платформы, которую вы используете на нем (см. CMX Systems, Inc[^] для примера: TCP/IP реализация для 8, 16 и 32-битных микропроцессоров)
  • использовать расширения в реальном времени для Окна, любить Ardence RTX (видеть IntervalZero - RTX[^]): таким образом, вы можете писать Окна приложения со строгим временным поведением, и, вероятно, вы сможете работать с ними протокол UDP пакеты без проблем