Сигнал ReadyRead на QUdpSocket испускается, только если сначала вызван метод связывания - PullRequest
0 голосов
/ 20 апреля 2020

Использование PyQt4 и Qt4.1, Python 3.7.2, последняя версия PyInstaller

У меня есть два приложения (c ++ и python), которые взаимодействуют через локальный хост udp, порт 2340 и порт 2341) На обоих приложения Я ограничиваю порты

self.SocketIn.bind(QtNetwork.QHostAddress.LocalHost, 2340, QtNetwork.QUdpSocket.ReuseAddressHint)
self.SocketIn.readyRead.connect(lambda: print("Hallo")

и (на стороне c ++)

SocketOut->bind(QHostAddress::LocalHost, 2340, QUdpSocket::ReuseAddressHint);

Оба приложения возвращают true, а состояния также равны "4", что означает, что они находятся в BoundState .

Теперь проблема: если я сначала запускаю приложение python, оно работает. Приложение c ++ получает сообщения на порт 2341 и отправляет сообщения на 2340. Приложение python получает сообщения на порт 2340 и отправляет сообщения на порт 2341. Если сначала запустить приложение c ++, приложение python не вызовет readyRead сигнал на порт 2340 больше. Как я уже говорил, есть все boundStates (python app, приложение c ++, -> порты 2340, 2341), и сообщения действительно отправляются из приложения c ++ (видно из wireshark)

В чем здесь ключ?

РЕДАКТИРОВАТЬ: Теперь я понял, что наоборот это то же самое поведение. Кажется, что принимающая сторона должна быть сначала инициализирована, чтобы работать!

...