具有大型对象的 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
- 等。。。
如果是这样,我是否应该将我收到的数据存储在每个客户端的某个位置,直到我认为我有足够的数据,然后尝试反序列化它?
谢谢
当你添加零件排序和拆分时,你在重新发明TCP的道路上还有很长的路要走 - 但要自己这样做,而不是使用多年来来之不易的经验。
从根本上说,听起来UDP并不适合您要做的事情。这是绝对要求吗?