在 qt 中使用 TCP IP 发送结构

To send structure using TCP IP in qt

本文关键字:IP 结构 TCP qt      更新时间:2023-10-16

我有以下一段代码。 我希望在Qt中使用TCP IP发送结构,但我无法做到这一点。请帮我发送结构。

struct message
{
    U8 messagedata;
    U32 date;
}msg;

msg.messagedata = 30;

消息日期 = 27;

然后使用 write(msg, len(msg)) 功能发送。但是如何将此结构放入此写入函数中。我正在使用内置的Qt网络库进行TCP/IP。

要在Qt中使用TCP,您可以使用QTcpSocket和QTcpServer类。 QTcpSocket继承了QIODevice类,该类具有方法写入功能,可以根据需要在套接字中写入数据。

要向您发送结构,您可以打包结构:

#pragma pack(push, 1)
struct message
{
    quint8  messagedata;
    quint32 date;
}msg;
#pragma pack(pop)

然后使用写入方法,如下所示:

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;

尝试:

QByteArray ba;
ba << msg.messagedata << msg.date;
socket.write (ba);

这只是向客户端发送一个QByteArray,您也需要发送大小(实现一个简单的协议)。