首页 > 解决方案 > 仅当首先调用绑定方法时才会发出 QUdpSocket 上的 ReadyRead 信号

问题描述

使用 PyQt4 和 Qt4.1,Python 3.7.2,最新的 PyInstaller

我有两个应用程序(c++ 和 python),它们通过 udp localhost、端口 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应用不会触发2340端口的readyRead信号了。就像我说的所有 boundStates 都在那里(python 应用程序,c++ 应用程序,-> 端口 2340、2341)并且消息实际上是从 c++ 应用程序发送的(在 wireshark 中看到)

这里的线索是什么?

编辑:现在我意识到相反的行为是相同的。看来必须先初始化接收方才能工作!

标签: qtpyqtqudpsocket

解决方案


我有一个类似的问题。QUdpSocket 文档状态

如果您只想发送数据报,则无需调用 bind() 。

当我从发送方移除绑定时,我可以按任何顺序启动和停止发送方和接收方,并且它起作用了。


推荐阅读