【问题标题】:c++ deserialize object sent from c# application via UDPc++ 反序列化从 c# 应用程序通过 UDP 发送的对象
【发布时间】:2016-03-31 15:36:15
【问题描述】:

我在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 消息... 问题是:

我现在如何将接收到的字节数组转换回具有属性值的可用对象?

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

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

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

我精通 C#,但对 c++ 完全陌生,所以请不要混合 c 和 c++。另外,我想使用Boost 或其他库。

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

【问题讨论】:

    标签: c# c++ serialization udp


    【解决方案1】:

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

    协议缓冲区是一种方式,这里有一个类似的问题,关于做什么between c++ and java。那里建议使用 Google 的 PB,尽管还有其他的。

    但是,我最喜欢以与语言无关的方式序列化对象的方式是 JSON。这很容易推理,并且可能是您可以实施的最快最干净的事情。所以我会先这样做,除非你有任何明显的表现反对意见。你似乎已经知道如何做到这一点?

    【讨论】:

    • 谢谢。是的,我知道如何使用 JSON。但是,我更喜欢高性能解决方案,因为我希望测量事件客户端、一些处理服务器端和客户端处理完成响应之间的时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多