реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> W5100, прием данных по UDP-не все ясно
Метценгерштейн
сообщение Aug 26 2014, 12:23
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



в даташите такая картинка
http://c2n.me/iNFnYP
т.е. принял модуль данные по UDP, выдал мне их как на картинке. А на самом деле есть еще и src IP, а он только dst показывает. Wireshark показывает целиком пакет, а W5100 выхватывает из него части и показывает их мне.
Нельзя ли как-то в W5100 получить в том числе и src IP при приеме пакета?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 26 2014, 16:21
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Здесь они что-то попутали. В этом заголовке указаны Src IP и номер порта отправителя. Dst IP и порт вытягивать ниоткуда не нужно - это тот IP, который вы прописали в W5100 и номер порта, который прописали в socket перед открытием.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Aug 26 2014, 17:36
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



да, точно. Главное, смотрел отправку терминалкой и просмотрел- там действительно IP компа, от куда отправляю
Спасибо.
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Aug 26 2014, 20:16
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Цитата(Сергей Борщ @ Aug 26 2014, 20:21) *
номер порта, который прописали в socket перед открытием.

а как прописать так, чтобы все порты слушал? А не только тот, что в сокете перед открытием указан?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 27 2014, 07:08
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Метценгерштейн @ Aug 26 2014, 23:16) *
а как прописать так, чтобы все порты слушал?
Никак. Во всяком случае если socket настраивается как UDP. Может быть как-то через MAC Raw mode можно, не изучал.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Aug 31 2014, 18:59
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



столкнулся с такой проблемой-

если записать так:
Код
socket(0,Sn_MR_UDP,3000,0);
socket(0,Sn_MR_UDP,3001,0);

то есть, я сначала один порт src указал, а потом его поменял, то программа не работает.
wireshark пишет, что адрес dst не корректен. Т.е. визнет не хочет при двойном открытии сокета записывать src port.
Даже, если принудительно вписать туда номер порта
Код
    temp = (IINCHIP_READ16 (Sn_PORT0(0)));
    IINCHIP_WRITE16 (Sn_PORT0(0), 3001);
    temp = (IINCHIP_READ16 (Sn_PORT0(0)));

и считать его в переменную, то один хрен прога не работает.
в даташите на визнет написано, что запись порта д.б. до включения сокета. Это и сделано, если вызвать ф-ю
Код
socket(0,Sn_MR_UDP,3001,0);

она сначала закрывает сокет, меняет все, открывает заново.
но и так не работает.

из-за чего это может быть?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01396 секунд с 7
ELECTRONIX ©2004-2016