Данные UDP не читаются правильно (задерживается) - PullRequest
2 голосов
/ 28 июля 2011

У меня есть сервер, работающий на настольном ПК с Windows 7, и клиент, работающий на ноутбуке Lenovo с Windows XP.

В цикле постоянно происходит следующее:

  • Клиент передает пакеты UDP, содержащие некоторую информацию идентификатора.
  • Сервер получает широковещательную рассылку и отвечает другим UDP-пакетом с некоторыми данными внутри.

В Wireshark я вижу, что сервер отправляет правильные данные, но функция RECVFROM возвращает некоторые другие данные. Примерно через 20-30 секунд данные окончательно прочитаны правильно.

Если я запускаю и сервер, и клиент на рабочем столе, он работает нормально. Есть идеи?


Соответствующий фрагмент кода:

do
    {
       result=recvfrom(_socket,buff,buffLen,0,(SOCKADDR*)&SenderAddr,&SenderAddrSize);
       if(result != SOCKET_ERROR)
       {
          //small processing
          .....
         ////
         sendto(_socket,buff,16,0,(SOCKADDR*)&SenderAddr,sizeof(SenderAddr));
       } 
    while(true)

Ответы [ 2 ]

0 голосов
/ 02 августа 2011

Спасибо за ваши ответы .. Проблема заключалась в том, что метод sendto на ноутбуке вел себя по-другому по сравнению с рабочим столом.На ноутбуке sendto отправлял 3 UDP-пакета, на destop только один.Мое приложение ожидало только один пакет, поэтому время обработки + умножение на 3 создает впечатление задержки.Я не понимаю, почему это происходит, но это была проблема.

0 голосов
/ 02 августа 2011

Здесь я немного догадываюсь.

Я не могу себе представить, что ваши UDP-пакеты будут где-то колебаться в течение 20 секунд.Ведь RTT по всему миру через общедоступный Интернет обычно в 40 раз меньше.Поэтому я думаю, что вы просто продолжаете пересылать свои данные до тех пор, пока не получите ожидаемый ответ.

Если я прав в своем предположении, то, что вы видите, это обычная потеря пакетов UDP .Это ноутбук по беспроводной связи?Блокирует ли клиентское приложение какой-либо ввод?

Запускать wireshark на ноутбуке тоже.Видите ли вы тот же номер и последовательность пакетов, что и на стороне отправителя (сервера)?Если так, то клиент не использует эти пакеты достаточно быстро.Если вы действительно видите пакеты обратно на клиенте с этой 20-секундной задержкой, то вам действительно нужно описать больше настроек, чтобы объяснить магию:)

...