gpt4 book ai didi

c# - 理论 : C# Sockets, 通过网络发送序列化对象

转载 作者:行者123 更新时间:2023-11-30 15:07:05 25 4
gpt4 key购买 nike

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

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

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

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

但是,我不知道如何通过网络套接字发送序列化数据。发送字符串很容易...您只需在末尾附加一个终止符字符串并等待接收即可。我不知道你怎么能用对象做一些等价的事情;所以任何想法/帮助/教程将不胜感激。

谢谢。

最佳答案

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

  • 二进制、高效(CPU 和带宽)格式
  • 版本容错度高
  • 跨平台(protobuf)

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

这样一来,库就完成了将对象连接到网络的所有工作。唯一的症结在于您对“任何可序列化对象”的定义——只要客户端/服务器同意所涉及的消息类型,就没问题——但“任何”有点棘手.

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

关于c# - 理论 : C# Sockets, 通过网络发送序列化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6941833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com