通过网络发送和接收<vector>数据

Send and receive <vector> data through network

本文关键字:lt vector 数据 gt 网络      更新时间:2023-10-16

我有一个定义如下的向量:

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/