1

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

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

在编写 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
  • ETC...

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

谢谢

4

1 回答 1

4

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

从根本上讲,UDP 听起来并不适合您正在尝试做的事情。是绝对要求吗?

于 2012-05-28T16:27:35.817 回答