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

标签 c++ vector winsock

我有一个 vector 定义如下:

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

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

这是我发送字符串的方式:

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

    return 0;
}

我只是想不出解决方案。

最佳答案

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

当然,细节决定成败:接收者如何知道预期有多少字符串?接收方如何知道一个字符串在哪里结束以及下一个字符串从哪里开始?

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

至于接收方知道一个字符串在哪里结束和下一个字符串在哪里开始,一种方法是确保在每个字符串的末尾发送一个 NUL/0 字节;然后接收方可以查找该字节以了解每个字符串的结束位置。另一种方法是在发送字符串本身之前发送字符串中的字节数,然后接收方就可以确保读入该字符串的字节数。

关于c++ - 通过网络发送和接收<vector>数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30364748/

相关文章:

c++ - 将 vector 的底部四分之一有效地移动到顶部?

java - 是否可以通过 IPX/SPX 协议(protocol)使用 Java Socket?

VB6 winsock控制: closing a connection and connecting to another server

c++ - 您今天如何使用 C++11?

c++ - std 构造函数的调用是否需要限定?

c++ - 将用户的 N 个元素添加到 vector 端线

C++ 非阻塞套接字 - 等待所有接收数据

c++ - 如何使用 glUniformMatrix4fv 将 4x4 变换矩阵传递和使用到 vShader 中?

c++ - std::atomic 和多核处理器

arrays - 直接访问R中data.frame中的Vector元素?