c++反序列化通过UDP从c#应用程序发送的对象

本文关键字:应用程序 对象 反序列化 UDP c++ | 更新日期: 2023-09-27 18:27:59

我在c#中有一个应用程序,它通过UDP连接到另一个用c++编写的应用程序。我更喜欢高性能的解决方案,因为我希望测量客户端事件、服务器端处理和客户端处理完成响应之间的时间。本质上:往返延迟。

我在c#中有一个对象,例如:

public class Package{
    public Package(){}
    public float DeliveryTime = 1.5;
    public int NumberOfItems = 2
}

然后,我将包序列化为一个字节数组:

Package package = new Package();
var serializedPackage = ObjectToByteArray(package);

接下来,我通过UDP发送我的serializedPackage(我知道,没有交货或订单的保证,但我不需要这些保证)。

client.Send(serializedPackage , serializedPackage .Length, ip);

我的c++应用程序随后收到UDP消息。。。问题是:

我现在如何将接收到的字节数组转换回一个保留了属性值的可用对象

我需要反序列化到某个类包c++端,然后使用属性。。。例如一些sudo代码:

DeserializedPackage deserializedPackage = someDeserializeFunction(bytes);
if(deserializedPackage.NumberOfItems > 0){
    cout << deserializedPackage.DeliveryTime;
}

我从哪里开始?这可能吗?

我精通C#,但对C++来说绝对是新手,所以请不要混合使用C和C++。此外,我不想使用Boost或其他库。

我也愿意接受诸如"将你的包对象转换为JSON并发送它。然后反序列化你的JSON并填充一个名为package的c++对象"之类的建议。

c++反序列化通过UDP从c#应用程序发送的对象

您的问题是一样的,如何在两种语言之间序列化类型。

协议缓冲区是一种方式,这里有一个类似的问题,关于在c++和java之间做什么。谷歌的PB是在那里建议的,尽管还有其他的。

然而,我最喜欢的以与语言无关的方式序列化对象的方法是JSON。它很容易推理,可能是你能实现的最快、最干净的东西。所以我会先这么做,除非你有任何证据表明你对性能有异议。你似乎已经知道怎么做了?