在同一解决方案中的两个项目之间实时通过 TCP 套接字流式传输 C++ 结构数据的最佳方法是什么?

What is the best way for streaming C++ struct data through TCP socket in Real-time between two projects in the same solution?

基本上我有一个结构:

typedef struct MyStruct1 {
  vector<MyStruct2> data;
  chrono::high_resolution_clock::time_point time_stamp;
} MyStruct1;

MyStruct2是一个包含一些opencv数据的结构,例如:Point2f。我想通过 TCP 套接字在同一个 VS 解决方案中的两个项目之间共享这个(因为我需要可靠的连接)。我也尝试过共享内存,但发现这不是共享复杂数据结构的好方法,而是用于 POD。但是每次我在客户端(接收数据的项目)中取消引用指向 MyStruct1 的指针时,我的程序都会崩溃。有什么解决办法吗?或者我应该尝试其他方式(那会是什么方式)? 我使用的代码在这里:server and client(注意:我没有使用 argv 和 argc,但其他一切都是一样的)。 提前致谢。

TCP 提供字节流。要通过 TCP 发送某些内容,您需要将其序列化为字节流。您不能只通过 TCP 连接写入 MyStruct1 对象。这永远不会正常工作,因为对象在内存中的内部表示将包含仅在进程内部有意义的数据,而这对另一个进程没有任何意义。

另一个要记住的问题:该向量中可能有一个条目。可能有一千个。接收方如何知道要读取多少字节或知道对象在哪里结束?

有很多用于序列化和反序列化的库和工具。

只要它在同一台机器上并在同一时间编译,所有设置都相同,并且数据 class 在两者上共享,您就可以定义一个朋友 operator<<operator>> 每种类型,将被发送。

完全未经测试的不完整代码

ostream& operator<<(ostream& os, const MyStruct1 & dt) {
    os << dt.time_stamp << dt.data.size(); // time_stamp might need more magic
    for(auto& val : dt.data) // the MyStruct2 must also have an <<
      os << val;
    return os;
}

将其写入strstream并将字符串发送到另一端,使用>>对其进行解码。