通过网络在C/C++服务器、C/C++和C#客户端之间发送数据结构

send data struct over network between C/C++ server, C/C++ and C# clients

本文关键字:C++ 之间 客户端 数据结构 服务器 网络      更新时间:2023-10-16

我的客户端将使用名为annoucement的结构/类与客户端通信。我想我会用C++编写服务器。将会有许多不同的类继承annoucement。我的问题是通过网络将这些类发送到客户端

我想也许我应该用iovec。然而,我不知道C#中是否有与iovec相对应的东西。

想法是:我会用writev发送一个结构,客户端会使用readv从套接字中读取数据,就像它是一个annoucement类一样,检查接收到的结构中的uint16变量来推断确切的类型,并用appropite iovec/readv读取其余数据。

C#可以将整个对象作为数组发送,但如何在C/C++中解释它呢?

我希望C/C++和C#客户端都使用相同的协议,但这是我第一次设计协议,我不确定我的所有想法是否能协同工作。

任何提示都将不胜感激。

不要试图用结构来定义协议。

定义公告的格式,即以何种顺序组成公告的字节,然后定义如何按顺序传输多个公告。

一旦定义了这种有线格式,就可以使用每种编程语言中最合适的编程语言结构、库和框架,在每种语言中实现解析器和编写器。

一个很好的例子是protobuf:格式规范、C++、Java、Python实现、.NET实现。

这个问题有点混乱,但我有一种感觉,您可能对协议缓冲区感兴趣,因为它可以有效地序列化数据并在网络上传输数据。

在序列化方面有很多选项。parashift.com上的常见问题解答详细讨论了序列化/反序列化:http://www.parashift.com/c++-faq-lite/serialization.html