![]() |
|
Модераторы: marykone |
![]()
|
|
| Курсант |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 перестал ловить пакеты даже с нулевой контрольной суммой. Коды программ пока не привожу, т.к. вопрос общего характера, а не конкретного. Может быть кто-то сталкивался с подобными явлениями? |
|||
|
||||
| Курсант |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 338 Регистрация: 21.2.2009 Где: Балашиха или Воро неж Репутация: нет Всего: 4 |
Всем спасибо, проблема решена!
Оказалось, проблема в компьютере. Почему-то реализация сетевых протоколов на моём ноутбуке не соответствует общепринятым. Т.е. даже с другого компьютера (под управлением Windows XP) он пакеты не принимает. Возможно, произошёл сбой, т.к. раньше пакеты принимались. При этом UDP-клиент, запущенный на другом компьютере, ведёт себя вполне нормально - получает пакеты от платы с нулевой контрольной суммой, а также принял один пакет при фиксированной контрольной сумме и переборе данных. Извините за беспокойство |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Сетевые технологии | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |