问题标签 [qudpsocket]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
218 浏览

python - QUdpSocket 在 PyQt5 中没有 writeDatagram() 函数吗?

为什么在 PyQt5 QUdpSocket 中没有 writeDatagram() 而只有 write() 和 writeData()?

那么我怎样才能将数据发送到某个IP地址和端口呢?

0 投票
1 回答
149 浏览

c++ - 从 QUdpSocket 发送的数据包在 Wireshark 中看不到

我试图在 Wireshark 中查看我的传出 UDP 流量。

我创建了新的套接字并将其绑定到我的 QHostAddress::LocalHost 没有错误。然后我发送了一些数据 writeDatagram 并且返回值是正确的,但是我在 Wireshark 中没有看到传出流量。

我检查了防火墙设置,如果我关闭它,结果是一样的。

0 投票
0 回答
217 浏览

c++ - 手动 QUdpSocket 实现是否适合图像流式传输?还是有更好的方法?

我正在为图像处理应用程序创建一个远程查看器,并且需要通过网络发送结果以便记录它们。我目前正在尝试使用基于 QUpdSocket 的 UDP 套接字流式传输图像。UDP 很好,因为我不需要每个图像,所以我可以处理潜在的数据包丢失。在 localhost 上测试下面的实现时,我可以得到 >20 fps,这比我在实际应用程序中需要的要多得多。但是,一旦我移至网络上的 2 台 PC,我几乎不会收到任何图像。我知道数据包正在通过,因为我可以看到网络活动,但是我正在丢弃负载,或者解码/渲染发生了其他奇怪的事情。

该实现非常基本,因此任何指针都会受到赞赏。或者我不应该自己这样做,因为这类事情有很好的库?

发送方:等待接收方发送数据包并识别自己,找到后,拍摄一张图像,将其拆分为数据报大小(此处为 508),然后发送 x 个数据报。

接收方:QUdpSocket 调用 datagramPending 读取数据报,将其发送到 precessDatagram 决定是头部还是图像数据包。如果它是一个图像数据包,则将内容移动到由数据包开头的 4 位数字指定的位置的缓冲区中。当所有图像数据包都被接收到后,将缓冲区转换为图像。

0 投票
2 回答
765 浏览

c++ - QUdpSocket在高频环境下的局限性

我有一个以~10kHz 读取速率处理 UDP 数据的任务。我正在使用 Qt 5.13.1 (MinGW32),所以我尝试使用QUdpSocket.
我做了一个简单的测试程序,但结果有点令人沮丧。readyRead()信号太慢了。出于某种原因,我每 2-4 个信号延迟超过 1 或 2 毫秒。
我做了一个简单的数据包计数器,并将它与我在wireshark中看到的进行比较。果然有丢包。

我可以做些什么来提高性能?或者也许这只是 Qt 事件循环的限制?

我用 Qt Creator 4.10.0 运行它。在 Windows 7 上。

更新:根据您的建议:我尝试过:

  1. 在不同的线程中移动套接字。这提供了更多的性能.. 非常一点

  2. LowDelayOption = 1 - 我没有注意到任何变化

  3. ReceiveBufferSizeSocketOption - 我没有注意到任何变化

  4. 阅读时不使用 QDebug - 我没有检查它,仅用于收集统计信息

udpproc.h

udpproc.cpp

UDPProc::UDPProc() {

}

网络人.h

网络人.cpp

0 投票
0 回答
51 浏览

qt - Qt QUdpSocket 在发送数据时触发 readyRead()

我为 UDP 通信编写了以下简单程序:

现在的问题是,当我运行这个程序时,readyRead() 也会在发送数据时触发。几个有趣的发现:

  • 我尝试将数据发送到网络上的不同 IP。对于少数 IP,它不会触发我的 readyRead() 函数。但是对于大多数 IP,readyRead() 确实会触发。

  • 虽然 udpSocket->hasPendingDatagrams() 返回 true,但它没有任何数据。

  • 我正在运行 Qt 5.12.3(MSVC 2017,32 位)。当我在 Qt 5.3.2(MSVC 2010,32 位)中运行相同的程序时,它工作正常,我的 readyRead() 永远不会触发。

任何人都可以帮忙吗?

0 投票
1 回答
577 浏览

qt - Qt无法加入指定networkInterface的多播组

我在 MACOS10.15 上使用 QT5.6.3。我有两个以太网接口。一个是 en0 ,另一个是 en6 。en0的IP是192.168.10.199,en6的IP是192.168.1.123。现在我需要从 en0 接收多播。多播组地址 239.255.255.251 ,多播端口是 47810。这是我的简化代码:

但是,我用netstat命令,发现en0加入了多播组,不是我指定的en6

如何让 en6 加入多播组。就像通过接口加入多播组一样不起作用。请帮助我,谢谢。

0 投票
1 回答
126 浏览

qt - 仅当首先调用绑定方法时才会发出 QUdpSocket 上的 ReadyRead 信号

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

我有两个应用程序(c++ 和 python),它们通过 udp localhost、端口 2340 和端口 2341 进行通信)在这两个应用程序上,我将端口与

和(在 C++ 方面)

两个应用程序都返回 true,并且状态也是“4”,这意味着它们处于 BoundState。

现在的问题是:如果我首先启动它正在运行的 python 应用程序。c++应用在2341端口接收消息,在2340端口发送消息。python应用在2340端口接收消息,在2341端口发送消息。如果我先启动c++应用,python应用不会触发2340端口的readyRead信号了。就像我说的所有 boundStates 都在那里(python 应用程序,c++ 应用程序,-> 端口 2340、2341)并且消息实际上是从 c++ 应用程序发送的(在 wireshark 中看到)

这里的线索是什么?

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

0 投票
1 回答
328 浏览

c++ - 为什么我的班级没有使用 Qt QUDPSocket 接收 UDP 数据报?

我正在尝试开发一个 UDP 数据报接收器来从通过 UDP 数据报更新信息的 UDP 服务器读取数据包。我想接收数据报并在更新数据后读取有效负载。我按照 Qt 教程示例来开发多播接收器。我只是复制了代码,但是,虽然示例接收并读取数据报,但我的应用程序中的相同代码却没有。它不想工作。我错了什么?

这是我开发的类的代码:

UDPDataReceiver.h

UDPDataReceiver.cpp

在我的 MainWindow 类的构造函数中,我调用下面的代码来创建接收器的实例。

尝试运行多播接收器的 Qt 示例(https://doc.qt.io/qt-5/qtnetwork-multicastreceiver-example.html)它可以很好地读取数据报。在我的应用程序中使用相同的代码,没有读取任何内容。

感谢谁会帮助我。

0 投票
0 回答
117 浏览

c++ - QUdpSocket 未在 Windows 上接收数据但在 Ubuntu 上工作?

我在 QT 5.14 中有一个应用程序,它在 Linux(Ubuntu)上运行良好,但是,当我尝试在 Windows 上构建它时,QUdpSocket 接收数据。

以下是头文件:

以下是源文件:

代码的目标很简单,接收数据报并将其排队等待另一个线程处理。

在 Windows 10 上对此进行了测试,但它甚至不适用于 localhost。我尝试使用 PacketSender 或 Microsoft UDP Sender/Receiver 但没有运气。

谁能提供任何关于为什么这在 Windows 10 上不起作用但在 Linux 上工作得很好的见解?

谢谢!

0 投票
1 回答
477 浏览

c++ - 如何在单个应用程序中正确使用 Qt 中的多个 QUdpSocket

我创建了一个使用 UDP 协议的服务器和客户端类。在我的应用程序中,我实例化了 4 个服务器对象和 4 个具有不同端口的客户端对象。

问题是我同时从 4 个客户端向 4 个服务器发送数据,但是每个服务器只有在前一个服务器完成工作时才接收它的数据......

为什么会这样?

这是我的代码:

主要的:

服务器类:

客户端类:

这是我的输出数据: