在 qt 中使用 TCP IP 发送结构
Posted
技术标签:
【中文标题】在 qt 中使用 TCP IP 发送结构【英文标题】:To send structure using TCP IP in qt 【发布时间】:2016-07-05 12:23:50 【问题描述】:我有以下代码。我希望,但我无法做到。请帮我发送结构。
struct message
U8 messagedata;
U32 date;
msg;
msg.messagedata = 30;
msg.date = 27;
然后使用 write(msg, len(msg)) 函数发送。但是如何把这个结构放在这个写函数中。我正在为 TCP/IP 使用内置的 Qt 网络库。
【问题讨论】:
【参考方案1】:要在 Qt 中使用 TCP,您可以使用 QTcpSocket 和 QTcpServer 类。 QTcpSocket
继承 QIODevice 类,该类有 write 方法可以根据需要将数据写入套接字。
为了给你发送结构,你可以打包你的结构:
#pragma pack(push, 1)
struct message
quint8 messagedata;
quint32 date;
msg;
#pragma pack(pop)
然后使用 write 方法,像这样:
socket->write(reinterpret_cast<char*>(yourMessage), sizeof(msg));
另一种方式,你可以实现QDataStream的运算符:
QDataStream &operator<<(QDataStream &stream, const msg &m)
stream << m.messagedata;
stream << m.date;
并像这样使用它:
QDataStream stream(socket);
stream << yourMessage;
【讨论】:
我必须在你的消息变量中添加什么? 你可以把你的数据放在yourMessage中。例如:msg yourMessage; yourMessage.messagedata = 30; yourMessage.date = 27; (如您所愿)【参考方案2】:试试:
QByteArray ba;
ba << msg.messagedata << msg.date;
socket.write (ba);
这只是向客户端发送QByteArray
,您也需要发送大小(实现一个简单的协议)。
【讨论】:
以上是关于在 qt 中使用 TCP IP 发送结构的主要内容,如果未能解决你的问题,请参考以下文章