读书人

QTcpsocket发送数据的有关问题

发布时间: 2013-09-05 16:02:07 作者: rapoo

QTcpsocket发送数据的问题~
QTcpSocket如何向服务器发送float类型的数组,数组比较大~~
[解决办法]
你要自己定义一个包的结构:
typedef struct packet
{
int packet_header;
int dataLen;
float data[];
}NET_PACKET;

QTcpSocket *scocket = new QTcpSocket();
......

NET_PACKET *p = (NET_PACKET*)malloc(8+dataLen);
p->packet_header = xxxxxx;
p->dataLen = your_array_len;
memcpy(p->data, your_data, sizeof(your_array_len));

socket->write((char *)p, 8+dataLen);

free(p);

然后就可以了
如果你的数据很大的话,发送的时候可能会分成N个包发出去。
tcp协议会保证每个包对端都会收到,而且顺序是对的。

之所以要自定义包的结构,而不是直接发个裸数据,是因为你不知道tcp会把你的数据分成多少个包。
收到包的时候只要根据自己的数据结构拼包,或者处理粘包就可以。
如果你对数据的准确性要求十分高的话,可以在包的结构里加上校验。



读书人网 >QT开发

热点推荐