如何通过 TCP 和 protobuf-net 接收包

Posted

技术标签:

【中文标题】如何通过 TCP 和 protobuf-net 接收包【英文标题】:How to receive packages via TCP and protobuf-net 【发布时间】:2014-02-27 19:57:05 【问题描述】:

我正在编写一个使用协议缓冲区 C# 的应用程序。 我需要一些关于如何通过 TCP 发送和接收数据的示例。 特别是,如何确定哪种类型的包裹已经到达。 我有课:

[ProtoContract]
class Package1

//fields
 
[ProtoContract]
class Package2

//fields 

以及写入流的方法

private static void SendPackage(Stream stream, Package1 package)

   Serializer.Serialize<Package1>(stream, package);


private static void SendPackage(Stream stream, Package2 package)

   Serializer.Serialize<Package2>(stream, package);

现在,如何确定到达的包裹类型?

using (NetworkStream stream = client.GetStream())

    switch(packageType)
    
       //deserialize package
    

P.S 对不起我的英语不好。

【问题讨论】:

【参考方案1】:

有一个 Serializer.NonGeneric 方法可用于识别对象。看这个问答How can I send multiple types of objects across Protobuf?

【讨论】:

以上是关于如何通过 TCP 和 protobuf-net 接收包的主要内容,如果未能解决你的问题,请参考以下文章

我可以为 protobuf-net WCF 使用 net.tcp 绑定吗?

Protobuf-Net:实现服务器、rpc 控制器和 rpc 通道

如何以编程方式确定类型是不是可以通过 protobuf-net 本地序列化?

如何通过 ProtoBuf-net 使用 DateTimeKind 选项序列化 DateTime 字段

使用 ProtoBuf-Net 进行两组不同的序列化

TCP 半连接队列和全连接队列满了会发生什么?又该如何应对?