Модераторы: marykone
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Контрольная сумма протокола UDP, компьютер не хочет принимать данные UDP 
:(
    Опции темы
Курсант
Дата 20.12.2014, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

Репутация: нет
Всего: 4



Всем доброго времени суток!

Пишу ПО для платы с микроконтроллером. Плата имеет на борту разъём Ethernet. На данные момент я пытаюсь отправлять через него пакеты UDP, а принимать на компьютере (для приёма написана программа на C++). У меня не получается корректно посчитать на плате контрольную сумму протокола UDP. Я скурил много всего на эту тему, в курсе, что контрольная сумма считается с учётом псевдозаголовка UDP, с учётом чётности/нечётности данных. Но у меня не получается поймать UDP-пакет с контрольной суммой в заголовке UDP, отличной от нуля. Из этого я сделал вывод, что процедуры в моей плате неправильно считают контрольную сумму UDP.

Возможные причины - неправильный режим Big/Little Endian в псевдозаголовке, и т.п. В целях отладки я решил получить правильный UDP-пакет, т.е. с правильной контрольной суммой, с двумя байтами в данных. Напомню, контрольная сумма UDP также два байта. И вот, я принудительно пишу в пакете контрольную сумму 0x2222, и перебираю все возможные двухбайтовые значения от 0 до 65535 в данных. Т.е., по моим соображениям, хотя бы один из пакетов должен подойти под контрольную сумму 0x2222. Но компьютер не ловит ни один пакет. При этом если установить контрольную сумму отправляемого с платы пакета в 0x0000, то программа на компьютере ловит все пакеты.

Программа-клиент работает на WinSocket-ах. Сначала она работала на Indy, но потом Indy перестал ловить пакеты даже с нулевой контрольной суммой.

Коды программ пока не привожу, т.к. вопрос общего характера, а не конкретного. Может быть кто-то сталкивался с подобными явлениями?
PM ICQ Skype   Вверх
Курсант
Дата 22.12.2014, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

Репутация: нет
Всего: 4



Всем спасибо, проблема решена!

Оказалось, проблема в компьютере. Почему-то реализация сетевых протоколов на моём ноутбуке не соответствует общепринятым. Т.е. даже с другого компьютера (под управлением Windows XP) он пакеты не принимает. Возможно, произошёл сбой, т.к. раньше пакеты принимались.

При этом UDP-клиент, запущенный на другом компьютере, ведёт себя вполне нормально - получает пакеты от платы с нулевой контрольной суммой, а также принял один пакет при фиксированной контрольной сумме и переборе данных.

Извините за беспокойство smile
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Сетевые технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0400 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.