【发布时间】:2019-03-14 06:54:23
【问题描述】:
我试图在 c++ 中使用 tcp 发送接收和多维向量,但我不断收到分段错误。我试图一次发送一个向量而不是单个整数以减少延迟。我想知道我应该如何序列化和反序列化一个向量(没有任何像 Boost 这样的库)
服务器:
vector< vector<int> > contours = { {3,6,8}, {7,24,64}, {87,399} };
int len = 3;
int size =0;
while(waitKey(10) != 'q')
{
send(new_socket, &len, sizeof(int),0); //send size of vector
for(int i =0; i< len; i++){
size = (contours[i].size() * sizeof(int)) + 24; //byte amount to send and receive
send(new_socket, &size, sizeof(int), 0);
send(new_socket, &contours[i], size, 0);
}
}
客户:
vector< vector<int> >contours;
vector<int> lines;
int contoursize =0;
int size =0;
while(waitKey(100) != 'q'){
read(sock,&contoursize, sizeof(int));
contours.resize(contoursize);
for(int i =0; i< contoursize; i++){
read(sock, &size, sizeof(int));
cout<<" size: "<<size<<endl;
read(sock, &lines, size);
contours[i]= lines;
}
}
【问题讨论】:
-
read(sock, &lines, size);- 您正在覆盖vector本身的结构,而不是读入它保存的缓冲区。但是你为什么不想使用图书馆呢?标准库没有提供任何适当的序列化机制,因此使用其他一些广泛使用的库是正确的做法。 -
为什么是+24?而且你不能只是将随机数据读入一个对象。您必须发送 contents 并读入内容。这就是为什么它可能会爆炸
标签: c++ serialization vector tcp