![]() |
|
![]() ![]() ![]() |
|
svlary |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 8.9.2009 Репутация: нет Всего: 4 |
Постановка задачи: Есть две программы, которые обмениваются UDP пакетами через порт 1952. Каждая и принимает и передаёт. И то и другое может происходить в любом порядке - никаких правил нет.
Суть проблемы: Отправка пакетов через
выполняется совершенно нормально. А вот с чтением - проблемы. Пакеты приходят (проверено!) на eth интерфейс, но сокет чтения не посылает сигнал о поступлении данных, хотя написал всё, практически 100% - как в доке по Qt изложено:
Так вот сообщения "readPendingDatagrams()" не вижу, хотя пакеты приходят... Кто знает - в чём может быть дело? PS Советов переходить на TCP сокеты не нужно ![]() |
||||
|
|||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
1). socket_r - это глобальная переменная?
2). Объект NetLink, точно жив к моменту прихода сообщения? |
|||
|
||||
svlary |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 8.9.2009 Репутация: нет Всего: 4 |
Это строчки выдернутые из описания класса NetLink: - Первая строка из NetLink.h (раздел приватных переменных) - Следующие три - из конструктора класса NetLink - Последние четыре - метод, который в h-файле описан в разделе private slots: Та что с видимостью (вроде бы) всё в порядке... Всё это происходит внутри одного класса. Но что-то мне кажется, что тут МОС чудит... |
||||
|
|||||
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: 2 Всего: 10 |
Хорошо, Port совпадает? На передающем конце как передаются данные?
Это сообщение отредактировал(а) Guinness - 6.12.2013, 08:04 |
|||
|
||||
svlary |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 207 Регистрация: 8.9.2009 Репутация: нет Всего: 4 |
Да, я это проверял..
А вот здесь я наткнулся на абсолютно непонятную (для меня) ситуацию... Не сумев найти причины не срабатывания сигнала SIGNAL(readyRead()) я просто взял готовый пример из книги Шлее М. "Qt 4.8. Профессиональное программирование на C++". Собрал его и запустил. Мой приёмник работал! У меня появлось подозрение, что это связано с тем, что в примере М.Шлее передача идёт на localhost. Я подправил пример, задав в нём вместо localhost свой IP и запустил с другого компа. Мой приёмник работал... Казалось бы, вывод очевиден: неправильно работает мой ПЕРЕДАТЧИК. Но, увы... Если на приёмной стороне отказаться от использования сигнала, а сделать бесконечный цикл
То отправленные передатчиком пакеты принимаются нормально. Абсолютно нормально! Я распечатывал их содержимое... В чём же разница между моим передатчиком и передатчиком М.Шлее ? Я вижу два существенных отличия: - Мой передатчик (так нужно в реальности) работает на архитектуре PowerPC, а учебный - x86. И у них разная адресация... - Мой передатчик написан на чистом С и использует обычный вызов sendto, а учебный - writeDatagram. И у меня есть такое сильное подозрение, что разработчики Qt, при написании сигнала SIGNAL(readyRead()) где-то забыли поменять местами байты в принятом сообщении, из-за чего и нарушается логика работы. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |