struct MSG_ROOM_USER
{
int desk;
int pos;
};
比如我想网络发送N个结构体,
vector<MSG_ROOM_USER> vecUsers;
int datalen = sizeof(vecUsers);
memcpy(buf, &vecUsers, datalen);
这样传输到另一端之后,这样解析为啥不对:
vector<MSG_ROOM_USER> vecUsers;
memcpy(&vecUsers, recvData , recvlen);
如果不对,应该怎么结构化的去传输,不用纯字符串。
知道咋回事了,vector、map的存储,内存都不是连续的,所以用memcpy肯定有问题。
序列化,反序列化.最简单的办法就是弄成json协议.也就是传字符串
这也是比较好的方法。直接传字符串
vector是类,收到后直接memcpy,其构造函数等都无法执行,因此内容肯定不对
但是我接受端是用构造好了的vector接受的啊,不存在无法构造的问题。
使用tlv格式发送,自定义报头
哦 ,这个没听过。就是自定义了报文头,后边接struct?将struct转化为char* 接到头之后?
@躺着喝水: 是不是粘包拆包的问题?
@牧工: 啥意思 没听过
@躺着喝水: http://www.tuicool.com/articles/vaE3iq 看看这个有没有帮助,最简单的方式就是在发送的字节流末尾添加一个\r\n标识,接收端读到这个标识表示读到一个完整的消息,然后再解析收到的字节。不知道你的问题是不是这个原因。另外可以看看《TCP/IP详解 卷一》《Unix 网路编程》