我正在编写一个网络库,它同时利用 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...
如果是这样,我是否应该将我收到的每个客户端的数据存储在某个地方,直到我认为我有足够的数据,然后尝试反序列化它?
谢谢