【发布时间】:2009-10-21 04:40:46
【问题描述】:
我必须通过 TCP 将网格数据从一台计算机发送到另一台计算机……这些网格可能相当大。我很难考虑通过 TCP 发送它们的最佳方式是什么,因为我对网络编程知之甚少。
这是我需要放入缓冲区以通过 TCP 发送的基本类结构:
class PrimitiveCollection
{
std::vector<Primitive*> primitives;
};
class Primitive
{
PRIMTYPES primType; // PRIMTYPES is just an enum with values for fan, strip, etc...
unsigned int numVertices;
std::vector<Vertex*> vertices;
};
class Vertex
{
float X;
float Y;
float Z;
float XNormal;
float ZNormal;
};
我正在使用 Boost 库和他们的 TCP 东西......它相当容易使用。您可以只填充一个缓冲区并通过 TCP 将其发送出去。
但是,当然这个缓冲区只能这么大,我最多可以发送 2 兆字节的数据。
那么,将上述类结构放入所需的缓冲区并通过网络发送的最佳方法是什么?我还需要在接收端反序列化。
我们将不胜感激。
编辑: 再次阅读本文后,我意识到这确实是一个更普遍的问题,并非 Boost 所特有的......它更多的是分块数据并发送数据的问题。不过,我仍然有兴趣看看 Boost 是否有任何东西可以在某种程度上将其抽象出来。
【问题讨论】:
-
好吧,不管你使用什么 API,一个简单的方法是先发送一个小的 4 字节 hedaer,描述数据集的大小,然后继续发送数据直到你完成。真的没有限制。您还可以在发送数据之前对其进行压缩,具体取决于您的计算需求。很大程度上取决于特定的问题。
标签: c++ networking boost tcp network-programming