在qt中使用TCP IP发送结构

时间:2016-07-05 12:23:51

标签: c++ qt tcp qtnetwork

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

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

msg.messagedata = 30;

msg.date = 27;

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

2 个答案:

答案 0 :(得分:1)

要在Qt中使用TCP,您可以使用QTcpSocketQTcpServer类。 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;

答案 1 :(得分:0)

尝试:

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

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