C#UDP对象二进制序列化与大对象

时间:2012-05-28 16:24:19

标签: c# serialization udp binary-serialization

我正在编写一个同时利用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
  • 等...

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

谢谢

1 个答案:

答案 0 :(得分:4)

当你添加零件订购和拆分时,你在重塑TCP的道路上已经走了很长一段路 - 但是你自己这样做,而不是使用多年来来之不易的经验。

从根本上说,听起来UDP并非真正适合您正在尝试的内容。这是绝对的要求吗?