QT开发中文网

使用qt通过udp 协议 发送 结构体

下面是一个使用Qt通过UDP协议发送结构体的示例代码:

#include <QtCore>
#include <QtNetwork>

// 定义一个结构体
struct MyStruct {
    int id;
    QString name;
};

int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);

    // 创建UDP套接字
    QUdpSocket udpSocket;

    // 绑定本地IP和端口
    udpSocket.bind(QHostAddress::LocalHost, 8888);

    // 定义一个MyStruct类型的对象
    MyStruct myStruct;
    myStruct.id = 1;
    myStruct.name = "Hello World!";

    // 将myStruct序列化成QByteArray
    QByteArray datagram;
    QDataStream stream(&datagram, QIODevice::WriteOnly);
    stream << myStruct;

    // 发送数据报文到指定主机和端口
    udpSocket.writeDatagram(datagram.data(), datagram.size(),
                            QHostAddress::LocalHost, 9999);

    return app.exec();
}

在上述代码中,我们首先定义了一个名为MyStruct的结构体。然后创建了一个QUdpSocket对象并绑定了本地IP和端口。接着定义了一个MyStruct类型的对象,并将其序列化成了QByteArray。最后使用UDP套接字发送数据报文到指定的主机和端口。

如果要在另一台主机上接收这个数据报文,可以编写如下代码:

#include <QtCore>
#include <QtNetwork>

// 定义一个结构体
struct MyStruct {
	int id;
	QString name;
};

int main(int argc, char *argv[])
{
	QCoreApplication app(argc, argv);

	// 创建UDP套接字
	QUdpSocket udpSocket;

	// 绑定本地IP和端口
	udpSocket.bind(QHostAddress::LocalHost, 9999);

	QObject::connect(&udpSocket, &QUdpSocket::readyRead, [&]() {
		while (udpSocket.hasPendingDatagrams()) {
			// 从UDP套接字读取数据报文
			QByteArray datagram;
			datagram.resize(udpSocket.pendingDatagramSize());
			QHostAddress sender;
			quint16 senderPort;
			udpSocket.readDatagram(datagram.data(), datagram.size(),
			                       &sender, &senderPort);

			// 将QByteArray反序列化成MyStruct对象
			MyStruct myStruct;
			QDataStream stream(datagram);
			stream >> myStruct;

			qDebug() << "Received: " << myStruct.id << ", " << myStruct.name;
		}
	});

	return app.exec();
}

在上述代码中,我们创建了一个QUdpSocket对象,并将其绑定到指定的主机和端口。然后使用readyRead()信号来监听是否有数据可读,如果有就从UDP套接字中读取数据报文,并将其反序列化为MyStruct类型的对象。最后输出接收到的结构体数据。

需要注意的是,发送方和接收方的结构体定义必须完全相同,包括变量名、类型和顺序等。因为这些信息都会被序列化和反序列化。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=2738

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?