理论:C#套接字,通过网络发送序列化对象

时间:2011-08-04 12:59:14

标签: c# sockets serialization

我想为我最终会制作的游戏构建一个服务器/客户端引擎。

在规划时,我发现自己陷入了一个方面:通过网络发送对象。

我对客户端/服务器的目标是:

  • 我所描述的客户端/服务器是“世界”服务器,因此将使用TCP进行通信。
  • 服务器和/或客户端必须能够向对方发送任何可序列化的对象,并且接收方必须能够在其末尾对其进行反序列化。
  • 首选的序列化方法是二进制。

但是,我不知道如何通过网络套接字发送序列化数据。发送字符串很简单...您可以简单地将终结符字符串附加到结尾并等待接收。我不知道你怎么能做与对象相当的事情;所以任何想法/帮助/教程都将受到赞赏。

谢谢。

1 个答案:

答案 0 :(得分:5)

我有偏见(作为作者),但protobuf-net将是一个很好的解决方案:

  • 二进制,高效(CPU和带宽)格式
  • 非常容忍版
  • 跨平台(protobuf)

特别是,SerializeWithLengthPrefixDeserializeWithLengthPrefix(等)非常适合套接字使用,因为它会为您处理消息的分段。如果需要,您还可以使用此处的变体(以及非通用API)发送任何范围消息,并根据您认为的预定义数字识别消息类型的。

这样,库就可以解决将对象放到线上的问题。唯一的关键点是你对“任何可序列化对象”的定义 - 只要客户端/服务器同意所涉及的消息类型,它就没事了 - 但“任何”有点棘手

如果您有一个示例模型(它不一定是您的“真实”模型),请随意添加它,我将展示如何以这种方式使用它。