我有以下代码。我希望在qt中使用TCP IP发送结构,但我无法做到。请帮我发送结构。
struct message
{
U8 messagedata;
U32 date;
}msg;
msg.messagedata = 30;
msg.date = 27;
然后使用write(msg,len(msg))函数发送。但是如何将此结构放入此Write函数中。我正在使用内置的Qt网络库来实现TCP / IP。
答案 0 :(得分: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;
答案 1 :(得分:0)
尝试:
QByteArray ba;
ba << msg.messagedata << msg.date;
socket.write (ba);
这只是向客户端发送QByteArray
,您也需要发送大小(实现一个简单的协议)。