通过网络发送和接收<vector>数据
Send and receive <vector> data through network
我有一个定义如下的向量:
std::vector<char*> rooms;
const int rows = 100;
const int columns = 10;
我需要发送这个向量作为字符串缓冲区。然后接收并将该字符串转换为另一个具有相同大小的向量。
我是这样发送一个字符串的:
int SendData(std::string data)
{
s.SendLine(data);
return 0;
}
我实在想不出有什么办法。
既然已经知道如何发送字符串,而vector就是一系列字符串,那么发送vector最直接的方法就是一个接一个地发送字符串。
当然,细节决定成败:接收者如何知道需要接收多少个字符串?接收者如何知道一个字符串在哪里结束,下一个字符串在哪里开始?
答:在发送第一个字符串之前,发送一些初始数据,表明您打算发送多少个字符串。(如果你想让事情保持简单,这可以是一个额外的字符串,比如"100",接收者将知道使用它作为提示;或者你可以发送一个整数作为一个或两个或四个字节的二进制数据,如果你喜欢这样做[如果你发送它多于一个字节,一定要考虑到端序问题])
对于接收方知道一个字符串结束和下一个字符串开始的位置,一种方法是确保在每个字符串的末尾发送一个NUL/0字节;然后,接收器可以查找该字节,以知道每个字符串的结束位置。另一种方法是在发送字符串本身之前发送字符串中的字节数,然后接收器可以确保为字符串读取那么多字节。
您说您知道如何发送一个std::string
,并且您想将向量作为单个字符串发送。所以你所需要做的就是把一个字符串向量转换成一个大字符串。
你可以试着重新发明一种方法,或者只是使用(或模仿)别人已经想到的方法:
- 逗号分隔值 JSON XML>
都有各自的优点和缺点,其中最棘手的部分是对"特殊"字符的转义。
I need to send this vector as string buffer. And then receive and turn the string into another vector with same size.
这听起来,你的解决方案建立一个字符串的数据是一个解决方案,你的问题到了这一点,你想要你的解决方案来工作。但是,有一种更好的方法可以传输任何类型的数据,而无需使用手动编码的字符串体操。
如果你只想通过网络发送任何类型的数据,如skalars,容器和自定义构建类实例,你应该考虑使用一个库来为你做这些,而不是一次又一次地重新发明轮子。如果这是您对serializer
的案例搜索,您将准备好使用各种数据的解决方案!
看看http://www.boost.org/doc/libs/1_58_0/libs/serialization/doc/index.htmldiv或https://developers.google.com/protocol-buffers/
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中用vector填充一个简单的动态数组
- vector.resize()中的分配错误
- 使用std::vector的OpenCL矩阵乘法
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 在某些循环内使用vector.push_back时出现分段错误
- 当vector是tje全局变量时,c++中vector的内存管理
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- std::vector的包装器,使数组的结构看起来像结构的数组
- 呼叫运营商<<临时
- 为什么(-1)%vector::size()总是返回0
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 在C++中将类(带有Vector成员)保存为二进制文件
- 编译器如何区分std::vector的构造函数
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- std::vector::reserve(未知m),我知道m<<;N(通常)并且知道N
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- C++重载<<具有typedef'd std::vector
- std::映射<>或std::vector<>在处理大型标志集时