具有大型对象的 C# UDP 对象二进制序列化

本文关键字:对象 UDP 二进制 序列化 大型 | 更新日期: 2023-09-27 18:35:36

我正在编写一个网络库,它同时利用TCP和UDP通过互联网传输序列化对象。

库(简化)分为客户端和服务器。

编写 TCP 元素时,我没有遇到任何问题。每次我想发送序列化对象时,我只需将该传入对象的大小发送到对象本身之前,然后等到 NetworkStream 有足够的字节排队。

但是,编写 UDP 服务器有点困难。我有一个问题:

做的时候:

data = udpClient.Receive(ref sender);

我不确定在服务器端会发生什么。在第一个示例中,我将假设没有数据丢失或排序错误。但是,如果我序列化的对象被拆分为多个数据包,并且来自多个客户端,会发生什么情况?例如,如果这两个事件同时发生:

  • 客户端 A 发送 10,000 字节的对象
  • 客户端 B 发送 12,000 字节的对象

那么我会按照这个顺序(或足够接近)收到这样的东西吗?

  • 客户端 A 对象部分 1/5
  • 客户端 B 对象部分 1/6
  • 客户端 A 对象部分 2/5
  • 客户端 B 对象部分 2/6
  • 等。。。

如果是这样,我是否应该将我收到的数据存储在每个客户端的某个位置,直到我认为我有足够的数据,然后尝试反序列化它?

谢谢

具有大型对象的 C# UDP 对象二进制序列化

当你添加零件排序和拆分时,你在重新发明TCP的道路上还有很长的路要走 - 但要自己这样做,而不是使用多年来来之不易的经验。

从根本上说,听起来UDP并不适合您要做的事情。这是绝对要求吗?