首页 新闻 搜索 专区 学院

C++网络传输多个结构体怎么传

0
悬赏园豆:50 [已解决问题] 解决于 2018-08-13 10:46

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);

如果不对,应该怎么结构化的去传输,不用纯字符串。

躺着喝水的主页 躺着喝水 | 初学一级 | 园豆:157
提问于:2016-12-27 17:31
< >
分享
最佳答案
0

知道咋回事了,vector、map的存储,内存都不是连续的,所以用memcpy肯定有问题。

躺着喝水 | 初学一级 |园豆:157 | 2018-08-13 10:40
其他回答(3)
0

序列化,反序列化.最简单的办法就是弄成json协议.也就是传字符串

 

收获园豆:20
吴瑞祥 | 园豆:28820 (高人七级) | 2016-12-27 18:05

这也是比较好的方法。直接传字符串 

支持(0) 反对(0) 躺着喝水 | 园豆:157 (初学一级) | 2017-01-06 14:24
0

vector是类,收到后直接memcpy,其构造函数等都无法执行,因此内容肯定不对

收获园豆:10
2012 | 园豆:19149 (专家六级) | 2016-12-28 08:14

但是我接受端是用构造好了的vector接受的啊,不存在无法构造的问题。

支持(0) 反对(0) 躺着喝水 | 园豆:157 (初学一级) | 2017-01-06 14:25
0

使用tlv格式发送,自定义报头

收获园豆:20
创心coder | 园豆:736 (小虾三级) | 2017-01-06 09:10

哦 ,这个没听过。就是自定义了报文头,后边接struct?将struct转化为char* 接到头之后?

支持(0) 反对(0) 躺着喝水 | 园豆:157 (初学一级) | 2017-01-06 14:28

@躺着喝水: 是不是粘包拆包的问题?

支持(0) 反对(0) 创心coder | 园豆:736 (小虾三级) | 2017-01-06 16:04

@牧工: 啥意思 没听过

支持(0) 反对(0) 躺着喝水 | 园豆:157 (初学一级) | 2017-01-13 09:16

@躺着喝水: http://www.tuicool.com/articles/vaE3iq 看看这个有没有帮助,最简单的方式就是在发送的字节流末尾添加一个\r\n标识,接收端读到这个标识表示读到一个完整的消息,然后再解析收到的字节。不知道你的问题是不是这个原因。另外可以看看《TCP/IP详解 卷一》《Unix 网路编程》

支持(0) 反对(0) 创心coder | 园豆:736 (小虾三级) | 2017-01-13 09:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册