udp传输时需要使用QByteArray类型数据进行传输,我们想将自己定义的结构体通过udp传输,需要将结构体转换成QByteArray类型。
结构体定义为
#pragma pack(push,1)
struct Message1 {
QString type;
QString content;
QString time;
};
#pragma pack(pop)
#pragma pack(push,1)为结构体一字节对齐
发送信息 结构体->QByteArray
QByteArray str1;
QDataStream out(&str1, QIODevice::WriteOnly);
out << sendMessage.type << sendMessage.content << sendMessage.time;
m_udpSocket->writeDatagram(str1, QHostAddress(ui->ipLineEdit->text()), ui->portLineEdit->text().toInt());
接收信息 QByteArray->结构体
QHostAddress peerAddr;
quint16 peerPort;
QByteArray datagram;
datagram.resize(m_udpSocket->pendingDatagramSize());
m_udpSocket->readDatagram(datagram.data(), datagram.size(),&peerAddr,&peerPort);
QDataStream in(datagram);
Message1 recvmessage;
in >> recvmessage.type >> recvmessage.content >> recvmessage.time;