c++ QT UdpSocket
时间: 2023-06-20 21:07:49 浏览: 67
C++ 和 Qt 都提供了对 UDP socket 的支持。下面是一个简单的示例,展示了如何使用 Qt 中的 QUdpSocket 类发送和接收数据。
发送端代码:
```cpp
#include <QtNetwork>
int main()
{
QUdpSocket udpSocket;
QByteArray data = "Hello, world!";
udpSocket.writeDatagram(data, QHostAddress::Broadcast, 12345);
return 0;
}
```
接收端代码:
```cpp
#include <QtNetwork>
int main()
{
QUdpSocket udpSocket;
udpSocket.bind(QHostAddress::Any, 12345);
while (udpSocket.waitForReadyRead()) {
QByteArray datagram;
datagram.resize(udpSocket.pendingDatagramSize());
udpSocket.readDatagram(datagram.data(), datagram.size());
qDebug() << "Received: " << datagram;
}
return 0;
}
```
这个例子中,发送端将一个字符串 "Hello, world!" 发送到本地局域网内的所有设备。接收端监听端口 12345,等待数据到来。当有数据到来时,接收端会输出收到的数据。注意,在这个例子中,发送端和接收端都在同一台机器上,因此可以使用广播地址发送数据。
要在 Qt 中使用 UDP socket,必须包含头文件 `QUdpSocket`,并创建一个 `QUdpSocket` 对象。发送数据时,使用 `writeDatagram()` 方法;接收数据时,使用 `readDatagram()` 方法。在接收数据之前,必须先调用 `bind()` 方法,指定要监听的端口和 IP 地址。
需要注意的是,UDP 是无连接的,因此发送数据时不需要建立连接,只需要指定目标地址和端口号即可。但是,这也意味着 UDP 的数据传输是不可靠的,因为数据包可能会在传输过程中丢失或乱序。因此,在使用 UDP 时,需要考虑数据丢失和乱序的情况。