qt - 仅当首先调用绑定方法时才会发出 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 中看到)
这里的线索是什么?
编辑:现在我意识到相反的行为是相同的。看来必须先初始化接收方才能工作!
解决方案
我有一个类似的问题。QUdpSocket 文档状态
如果您只想发送数据报,则无需调用 bind() 。
当我从发送方移除绑定时,我可以按任何顺序启动和停止发送方和接收方,并且它起作用了。
推荐阅读
- r - Mean Values of all columns by a specific column
- javascript - Jest can't find function in module
- javascript - Javascript loop terminates partway through when accessing a prototype function
- flutter - How to change the padding of the snackbar in flutter
- angular - Mocking global functions in Jest
- javascript - azure javascript函数在回调后不返回任何内容
- arcgis - 使用 arcgis javascript 4.x 添加地理服务器 wms 层
- python - 尝试将 TF 模型转换为 TFLite 文件时出现错误“模块没有 lite 属性”
- mysql - 获取过去 7 天以来的行数
- r - 创建具有离散颜色的地图图