自定义个一个结构体struct data{……………………}
想通过QTcpSocket发送给QTcpServer
发送和接收的代码是这么写的
发送:
QByteArray msg;
QDataStream out(&msg,QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_8);
out<<quint16(0)<<data;
out.device()->seek(0);
out<<quint16(msg.size()-sizeof(quint16));
sender->write(msg);//sender是QTcpSocket对象
接收:
QDataStream in(socket);//socket是QTcpServer侦听到的套接字
in.setVersion(QDataStream::Qt_4_8);
if (block==0)//block是存储得到接下来数据块的长度
{
if (socket->bytesAvailable()<(int)sizeof(quint16)) return;
in>>block;
}
if (socket->bytesAvailable()<block) return;
in>>data;
这两段代码都是根据Qt自带的demo修改的
发送的时候编译没问题,但是接收端编译就出现问题了
求指点
------解决方案--------------------
这个问题可以这样解决:
假设你声明的结构体为:
typedef struct A
{
qint32 No;
QString message;
}msgBlock;
当你在server端接收的时候,可以采用如下的方法:假设监听端口获得连接的socket为serverConnect
可以这样写:
QDataStream readMsgFromSocket(serverConnect);
readMsgFromSocket.setVersion(QDataStream::qt_4_0);
//先声明一个msgBlock类型的结构体变量data
msgBlock data;
//假设socket中的数据顺序为先No,然后是message
readMsgFromSocket >> data.No;
readMsgFromSocket >> data.message;
//然后关闭socket即可