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

本文关键字:网络 序列化 对象 套接字 理论 | 更新日期: 2023-09-27 18:04:34

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

在规划时,我发现我卡在一个方面:通过网络发送对象。

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

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

然而,我不知道如何通过网络套接字发送序列化数据。发送字符串很容易…您可以简单地在末尾附加一个结束符字符串,然后等待接收它。我不知道如何用物体做等价的东西;因此,任何想法/帮助/教程将不胜感激。

谢谢。

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

我有偏见(作为作者),但protobuf-net将是一个很好的修复:

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

特别地,SerializeWithLengthPrefixDeserializeWithLengthPrefix(等)非常适合套接字使用,因为这可以为您处理消息的分段。如果你愿意,你也可以在这里使用一个变体(和非通用API)来发送任何范围内的消息,并让它根据你想到的预定义数字识别消息类型。

这样,标准库就完成了将对象放到网络上的所有工作。唯一的症结是你对"任何可序列化对象"的定义——只要客户端/服务器同意所涉及的消息类型,就可以了——但是"任何"有点棘手。

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