2015-05-21 265 views
0

发送和接收数据 我有定义为一个矢量如下: 通过网络

std::vector<char*> rooms; 
const int rows = 100; 
const int columns = 10; 

我需要发送这个向量作为字符串缓冲区。然后接收并将字符串转换为具有相同大小的另一个向量。

这是我送的字符串:

int SendData(std::string data) 
{ 
    s.SendLine(data); 

    return 0; 
} 

我无法想象一个解决方案。

+0

就像一张纸条:你知道,当传输的数据变大,在接收端一个简单的读是不够的 - 数据可以得到支离破碎通过的方式网络。所以从一个发送,可能会导致多个接收。 –

+0

一个建议与这个问题无关:'std :: vector '可以是'std :: vector ' – elimad

回答

1

既然你已经知道如何发送一个字符串,并且向量只是一系列字符串,那么发送向量最直接的方法就是简单地发送字符串,一个接一个。

当然,魔鬼在细节中:接收者将如何知道需要多少个字符串?接收器将如何知道一个字符串结束,下一个字符串开始?

回答:在发送第一个字符串之前,请发送一些初始数据,指出您打算发送多少个字符串。 (如果你想保持简单,这可能是一个额外的字符串,比如接收者将会用作提示的“100”;或者你可以发送一个整数作为一个或两个或四个字节的二进制数据,如果你愿意这样做[请确保考虑排序问题,如果你发送它作为多个字节])

至于接收器知道一个字符串结束和下一个开始,一种方法是确保发送每个字符串结尾的NUL/0字节;那么接收者可以查找该字节来知道每个字符串的结束位置。另一种方式是在发送字符串本身之前发送字符串中的字节数,然后接收方可以确保读取该字符串的许多字节。

0

你说你知道如何发送std::string,并且你想要将该向量作为单个字符串发送。所以你所需要的就是在一个大字符串中转换一个字符串向量。

你可以尝试重塑的一种方式,或者只是使用(或模拟)别人已经想到:

  • 逗号分隔值
  • JSON
  • XML

所有有他们的优点和缺点。而棘手的部分是逃避“特殊”字符。

0

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.htmlhttps://developers.google.com/protocol-buffers/