问题标签 [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 回答
2288 浏览

c++ - 通过 UDP 发送 XML 数据

我正在编写一个程序,该程序在输入时会发出带有一些数据的消息。我希望能够通过多播发送 udp 消息,并且我希望能够以 xml 格式发送此消息。目前我的程序是用 qt 编写的,如果可能的话,我想把它保留在 qt 中。

从文档中,我可以通过以下方式使用 udp 套接字创建和发送数据:

其中 groupaddress 是我发送消息的 ip 地址,port 是我发送消息的端口。

另一方面,我可以使用:

发送xml数据,QIODevice既可以将数据发送到文件,也可以通过TCP发送数据,并将所有数据格式化为xml格式。

但是,我无法找到将 udpSocket 设置为 QXmlStreamWriter 的设备并设置为在以这种方式传递数据时自动发送该数据的方法。有没有办法做到这一点?还是我必须将所有内容格式化为字节数组才能发送出去?

编辑:以防其他人偶然发现此信息。Nejat 描述的方法(作为答案列出)确实会通过 UDP 发送 xml 数据。但是,QXmlStreamWriter 最终会发送大量数据包,如果您尝试发送单个格式化的 xml 块,这不是很有用。如果您需要发送格式化的 xml 块,那么您需要执行以下操作:

第 1 步:创建您的 udp 套接字

第 2 步:创建一个 QByteArray,并将其设置为 QXmlStreamWriter 正在写入的“设备”。

第 3 步:发送您的 QByteArray 消息,如文档所述。

这样做会创建一个大数据包,然后通过 UDP 消息发送该数据包。您需要确保您的数据包足够小,以免在到达目的地的过程中被路由破坏。

0 投票
2 回答
6680 浏览

c++ - QUdpSocket:程序发送但不接收

我有问题QUdpSocket。我想创建一个简单的程序来使用 UDP 协议发送和接收数据。我已经阅读了许多类似的主题,但我没有找到解决方案。通信仅适用于QHostAdress::LocalHost,然后我提供与发送相同的数据,但如果我想将数据发送到外部设置的具体地址,例如194.181.161.134,那不起作用。这意味着数据已发送但我无法接收。这是我的代码:

0 投票
0 回答
74 浏览

c++ - Qt5 QUdpSocket 不能在 Windows Phone 8.1 上运行?

我可以在我的 Windows Phone 上接收 QUdp 数据报,但我不能发出任何东西,我在网络上的任何设备都看不到发出的数据报?我已经设置

在清单文件中。绑定不报告任何错误和

返回写入的正确字节数(所有错误信号都连接到“调试插槽”但没有触发,因此“writeDatagram”上没有错误)但我无法在网络上的任何其他设备上读取/获取它们。这是非常令人沮丧的,因为完全相同的代码可以在 Android、Linux 甚至 Windows 桌面上完美运行(接收和发送数据报)——是什么阻止了数据报退出 Windows Phone?
用 Qt5.3.2、Qt5.4.0 和 5.4.1 测试 - 同样的问题!

0 投票
0 回答
604 浏览

c++ - Qt QAudioInput如何发送固定数量的样本

我正在尝试使用 udp 协议将一些音频流从我的 Qt 应用程序发送到其他设备。我的问题是目标设备希望接收到的每个数据包都有固定数量的样本(在我的情况下为 320)。为此,我认为我必须使用我用来捕捉声音的 QAudioInput 对象的 setBufferSize 函数,但是关于整个 QAudioInput 对象的文档非常奇怪和糟糕。如何控制我发送的样品数量?谢谢你。

这就是我发送流的方式:

这是使用 QByteArray 的方式:

0 投票
1 回答
481 浏览

c++ - 使用数据流将 char 复制到 QbyteArray 包含一些额外的字节

问题概述:
操作系统:Ubuntu

我正在使用 qt 实用程序从远程机器接收视频数据(远程机器正在使用 gstreamer 发送实时数据)并将该数据写入端口 5000。

端口 5000 已绑定到另一个 gstreamer 实用程序。此实用程序侦听端口 5000 并将数据转换为视频流。显然事情并不完全正常,我无法观看视频。所以我有两个问题:

1)使用 Qt 实用程序,尽管端口绑定到 gstreamer 实用程序,但写入端口 5000 是否合法。

2)我正在使用 3rd 方库及其 api 从外部源接收数据。数据存储在字符数组中。如果我将其转换为 qbytearray 则 qbytearray 具有与 char 缓冲区相同的大小。例子

但是如果我使用 QDataStream ,那么 QbyteArray 会得到 4 个额外的字节。代码如下所示

我想知道为什么 QbyteArray 有额外的字符,我是否需要序列化数据以将其转发到端口 5000?

0 投票
0 回答
764 浏览

c++ - QUdpSocket 写入缓冲区已满?

我在 Windows XP 上使用 QUdpSocket 来发送一些数据。每 10 秒,我发送大约 100 到 500 个数据包,每个数据包大约 50 个字节。我对主机每次发送少量数据包没有任何问题。主机每 10 秒发送 500 个或更多数据包时出现问题。

使用 writeDatagram(...) 时,我收到错误消息“无法发送数据”。500 个数据包中的大多数都已发送(用wireshark 检查),但有些根本没有发送(最后一个)。

我认为当套接字的写缓冲区已满时会出现问题。但我不知道如何使用 Qt 来检查这一点,以等待缓冲区准备好写入更多数据。

如果没有 Qt,我可以使用 select(...) 方法来检查套接字是否准备好并一次发送 1 个字节。但是我怎么能用 QUdpSocket 来检查呢。没有这样的方法。此外, bytesToWrite() 似乎总是返回零。

我知道我可以睡觉并重试,但我认为这种方法不可靠。该方法可能因其他原因而失败。操作系统对此有一个很好的方法,称为 select()。

谢谢您的帮助。

0 投票
0 回答
902 浏览

c++ - 使用 QUdpSocket 和 QDatastream 发送 UDP 数据报

该程序能够发送 .txt 文件。但是任何其他文件类型都会损坏。我认为这与我存储帧的数据类型有关。对不起,我只是不知道我的问题可能出在哪里。

我是 QT 和 C++ 的新手。我必须使用 QUdpSocket 将任何文件通过网络发送到另一台计算机。然后,这台计算机应该以正确的顺序重新组合数据报并将其保存为文件。(QFiles 必须用序列号标题分解成段,并根据这些数字重新组合)。段与它们的序列号一起存储在 QByteArray 数组中。

然后通过 qudpsocket 发送 QByteArray 数组

重组代码的工作方式如下

收到所有帧后

0 投票
1 回答
110 浏览

c++ - 是否可以通过 UDP 交换 QVector?

我想通过 QUdpSocket 2 或 3 QVector 发送:

  • 一个 QVector < bool >
  • 一个 QVector<int>
  • 一个 QVector<float>

是否有可能做到这一点,如果可以,该怎么做?

0 投票
1 回答
104 浏览

c++ - QUdpSocket :我正在接收一个结构,我该如何使用它?

通过 QUdpSocket,我知道我将收到仅包含此结构的数据:

但是当我收到新数据时,我会收到一个 QByteArray 对吗?那么我怎样才能使用接收到的结构呢?

0 投票
1 回答
552 浏览

c++ - 通过 UDP 发送结构体

我想通过 QUdpSocket 发送一个结构。我知道我应该使用QDataStreamand QByteArray,但我不能,因为接收者不会使用 Qt。

我尝试了很多东西,但我从来没有找到似乎可以正常工作的东西。

我的结构将是:

我该如何正确地做到这一点?