Russian Qt Forum
Март 28, 2024, 15:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите ПЛЗ. Прием UDP  (Прочитано 11170 раз)
Dmitry
Гость
« : Январь 28, 2015, 01:12 »

Понимаю что тема вроде как изъезжена, но все равно ничего не пойму в чем проблема. НУ ОЧЕНЬ НУЖНО
Не могу понять почему не принимаются пакеты UDP?
Суть в следующем с ПЛИС посылаются UDP, Wireshark их ловит:
      1 0.000000000    192.168.1.2           192.168.1.1           UDP      60     Source port: 5125  Destination port: 5125
а программа совсем никак.
firewall отключил, пробовал и из под рута и так - все непочем.
Если запускать клиент и сервер на обном компе то все ок как по примеру из всех книг, а с ПЛИС вообще ни как
запускаюсь на Centos 7, Qt 5.4
Подскажите что тут не так
Код:
udpSocket = new QUdpSocket(this);
   
    udpSocket->bind(QHostAddress("192.168.1.1"),5125);
    connect(udpSocket, SIGNAL(readyRead()),
            this, SLOT(processPendingDatagrams()));
Заранее огромное спасибо!

Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #1 : Январь 28, 2015, 08:27 »

Код
C++ (Qt)
udpSocket->bind( QHostAddress::Any, 5125 );
// а лучше
udpSocket->bind( 5125, QUdpSocket::ShareAddress );
 
Записан
Dmitry
Гость
« Ответ #2 : Январь 28, 2015, 14:37 »

Спасибо, но к сожалению Не прокатывает оба варианта,
Вообще если честно не могу понять в чем принципиальная разница при приеме UDP сервера и клиента на одной машине, а чем и почему не получается прослушать порт при подключении ПЛИС по Ethernet?

Какие могут быть еще варианты?
Записан
CuteBunny
Гость
« Ответ #3 : Февраль 03, 2015, 13:13 »

Спасибо, но к сожалению Не прокатывает оба варианта,
Вообще если честно не могу понять в чем принципиальная разница при приеме UDP сервера и клиента на одной машине, а чем и почему не получается прослушать порт при подключении ПЛИС по Ethernet?

Какие могут быть еще варианты?

Если я не ошибаюсь, то при запуске сервера и клиента на одной машине, все происходит на loopback'е. Какие у вас там вообще есть еще сетевые интерфейсы? Может сервер шлет данные по-одному интерфейсу, а программа слушает на другом, а wireshark слушает на всех? Ну и netstat можно посмотреть при запущенном слушателе?
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #4 : Февраль 03, 2015, 15:11 »

WireShark не слушает пакеты на localhost: http://wiki.wireshark.org/CaptureSetup/Loopback
Записан
Bepec
Гость
« Ответ #5 : Февраль 03, 2015, 16:02 »

Ну для начала шарк включает неразборчивый режим сетевушки и слушает все пакетики.

        
Код:
socket8202_ = new QUdpSocket;
connect( socket8202_, SIGNAL( connected()), SLOT(connected()));
connect( socket8202_, SIGNAL( disconnected()), SLOT(disconnected()));
connect( socket8202_, SIGNAL( error(QAbstractSocket::SocketError)), SLOT(error(QAbstractSocket::SocketError)));
connect( socket8202_, SIGNAL( readyRead()), SLOT(readyRead()));
socket8202_->bind(8202);

Вот такой вот код спокойно принимал данные с ПЛИС.

Компьютер посылал ПЛИС дополнительный udp запрос - насколько я помню что то типа запроса имени, на что плис отвечала молчанием и udp пакет отбрасывался. Оо вспомнил. Запрашивался мак адрес карточки. Но плисина на это не рассчитывалась.

Собственно было и решение проблемы - вот такой вот bat файл
Код:
arp -s 192.168.180.10 22-33-44-55-66-AA 192.168.108.4
arp -s 192.168.180.11 22_33_44_55_66_AB 192.168.108.4
arp -s 192.168.180.12 22_33_44_55_66_AC 192.168.108.4
arp -s 192.168.180.13 22_33_44_55_66_AD 192.168.108.4
arp -s 192.168.180.14 22_33_44_55_66_AE 192.168.108.4
arp -s 192.168.180.15 22_33_44_55_66_AF 192.168.108.4
arp -s 192.168.180.16 22_33_44_55_66_10 192.168.108.4
arp -s 192.168.180.17 22_33_44_55_66_11 192.168.108.4

собственно первый ip - это возможные ip ПЛИС с прописанными мак адресами. Второй ip - ip принимающего компьютера.

PS И пакеты начинали приниматься приложением.  Улыбающийся

PPS да, собственно я разбирался в том инциденте, так сказать. Запрашивается mac адрес карточки для привязки к ip, но ПЛИС может только слушать и отправлять датаграммы, более полную реализацию сетевого протокола в неё не запихали Улыбающийся
Записан
CuteBunny
Гость
« Ответ #6 : Февраль 03, 2015, 16:14 »

Ну для начала шарк включает неразборчивый режим сетевушки и слушает все пакетики.

        
Код:
socket8202_ = new QUdpSocket;
connect( socket8202_, SIGNAL( connected()), SLOT(connected()));
connect( socket8202_, SIGNAL( disconnected()), SLOT(disconnected()));
connect( socket8202_, SIGNAL( error(QAbstractSocket::SocketError)), SLOT(error(QAbstractSocket::SocketError)));
connect( socket8202_, SIGNAL( readyRead()), SLOT(readyRead()));
socket8202_->bind(8202);

Вот такой вот код спокойно принимал данные с ПЛИС.

Компьютер посылал ПЛИС дополнительный udp запрос - насколько я помню что то типа запроса имени, на что плис отвечала молчанием и udp пакет отбрасывался. Оо вспомнил. Запрашивался мак адрес карточки. Но плисина на это не рассчитывалась.

Собственно было и решение проблемы - вот такой вот bat файл
Код:
arp -s 192.168.180.10 22-33-44-55-66-AA 192.168.108.4
arp -s 192.168.180.11 22_33_44_55_66_AB 192.168.108.4
arp -s 192.168.180.12 22_33_44_55_66_AC 192.168.108.4
arp -s 192.168.180.13 22_33_44_55_66_AD 192.168.108.4
arp -s 192.168.180.14 22_33_44_55_66_AE 192.168.108.4
arp -s 192.168.180.15 22_33_44_55_66_AF 192.168.108.4
arp -s 192.168.180.16 22_33_44_55_66_10 192.168.108.4
arp -s 192.168.180.17 22_33_44_55_66_11 192.168.108.4

собственно первый ip - это возможные ip ПЛИС с прописанными мак адресами. Второй ip - ip принимающего компьютера.

PS И пакеты начинали приниматься приложением.  Улыбающийся

PPS да, собственно я разбирался в том инциденте, так сказать. Запрашивается mac адрес карточки для привязки к ip, но ПЛИС может только слушать и отправлять датаграммы, более полную реализацию сетевого протокола в неё не запихали Улыбающийся

Не совсем понимаю при чем здесь протокол arp?
Записан
CuteBunny
Гость
« Ответ #7 : Февраль 03, 2015, 16:15 »

WireShark не слушает пакеты на localhost: http://wiki.wireshark.org/CaptureSetup/Loopback

localhost ~ 127.0.0.1, но это не сетевой интерфейс какбэ.

Читаем ниже по той же ссылке:


Supported Platforms

See CaptureSetup/NetworkMedia for Wireshark capturing support on various platforms. Summary: you can capture on the loopback interface on Linux, on various BSDs including Mac OS X, and on Digital/Tru64 UNIX, and you might be able to do it on Irix and AIX, but you definitely cannot do so on Solaris, HP-UX, or Windows.
Записан
Bepec
Гость
« Ответ #8 : Февраль 03, 2015, 17:20 »

Поясню для kvv.
Ситуёвина:
ПЛИС посылает UDP пакет с данными и имеет ip 192.168.1.6.
Компьютер получая пакет от неизвестного узла пытается узнать его MAC адрес при помощи протокола arp.
На arp запрос ПЛИС не реагирует - оно умеет только udp слать и принимать.
Результат:
Пакеты от компьютера не доходят до ПЛИС - потому что нет мак адреса в таблице и компьютер вообще не в курсе куда слать данные.
Пакеты от ПЛИС отбрасываются компьютером, причину я не знаю, но в сокет данные не попадают. Их можно получить только добавив в arp запись об ПЛИС или же включением захвата на сетевой карте.

PS данная схема происходит на Windows xp/7. Собственно проблема аналогична описанной в первом сообщении. Т.к. сетевые протоколы не привязаны к ОС, я предполагаю что сценарий одинаков для большинства операционных систем и мой совет может решить проблему.

PPS Если же я неправ (что будет странно, ведь способ 100% решает подобную проблему), я буду рад выслушать ваши соображения и поправки к моим репликам Улыбающийся
Записан
CuteBunny
Гость
« Ответ #9 : Февраль 03, 2015, 18:15 »

Поясню для kvv.
Ситуёвина:
ПЛИС посылает UDP пакет с данными и имеет ip 192.168.1.6.
Компьютер получая пакет от неизвестного узла пытается узнать его MAC адрес при помощи протокола arp.
На arp запрос ПЛИС не реагирует - оно умеет только udp слать и принимать.
Результат:
Пакеты от компьютера не доходят до ПЛИС - потому что нет мак адреса в таблице и компьютер вообще не в курсе куда слать данные.
Пакеты от ПЛИС отбрасываются компьютером, причину я не знаю, но в сокет данные не попадают. Их можно получить только добавив в arp запись об ПЛИС или же включением захвата на сетевой карте.

PS данная схема происходит на Windows xp/7. Собственно проблема аналогична описанной в первом сообщении. Т.к. сетевые протоколы не привязаны к ОС, я предполагаю что сценарий одинаков для большинства операционных систем и мой совет может решить проблему.

PPS Если же я неправ (что будет странно, ведь способ 100% решает подобную проблему), я буду рад выслушать ваши соображения и поправки к моим репликам Улыбающийся

Ок, спасибо.
Записан
billidean
Гость
« Ответ #10 : Ноябрь 27, 2015, 15:32 »

И вообще, в данном проекте для ПЛИС должна быть реализована реакция на ARP и ECHO, это как минимум, иначе могут возникать подобные проблемы.
Как уже было сказано, комп (например Винда), по истечении некоторого неопределенного времени будет запрашивать МАК-адрес девайса (ПЛИСки) для обновления своей таблицы соединений, и ОЕНЬ захочет что-то получить в ответ. А если не получит, то все пакеты от этого девайса будут отсеиваться самой ОС (Виндой). И т.п....

З.Ы.: даже если я и опоздал с ответом, это может помочь последующим читателям Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #11 : Ноябрь 27, 2015, 23:25 »

А на других ос так же не работает?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Bepec
Гость
« Ответ #12 : Ноябрь 28, 2015, 07:45 »

Ну, в моём случае на линуксе тоже не работало, всё так же из-за отсутствия привязки к маку.

to billidean: по хорошему в плисине много чего должно быть, но плисина ограничена задачей. Или так, или не лезет.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.086 секунд. Запросов: 22.