TCP套接字,在单个网络流C#上发送多个对象

时间:2011-12-02 07:13:07

标签: c# .net

我试图通过ArrayList绑定声音和图像序列数据,以使其同步并通过二进制格式化器将其序列化,以通过网络流发送。 服务器端抛出异常:

  

STREAM不支持寻求操作。

为了同步通过单个网络流实例发送的对象,我应该怎么做

2 个答案:

答案 0 :(得分:3)

TCP是基于流的,而不是基于消息的(如UDP所示)。这意味着没有告知消息何时开始或结束。 TCP仅保证以正确的顺序接收所有字节。它不保证一个Send()发送的所有内容都将通过一个Receive()收到。

因此,您需要指定某种消息识别机制。在这种情况下,标题是Jon建议的方式。

但是,您需要了解可能无法立即接收整个标头。这两条消息可能会立即到达。因此,您需要在将任何内容发送到BinaryFormatter以进行反序列化之前解析收到的缓冲区。

答案 1 :(得分:2)

我会将你要发送的每个对象拆分成一个单独的“消息”,其中一条消息由(比方说)4个字节组成,表示体长,然后是身体本身。

如果要发送序列化对象,则序列化为字节数组,写出长度,然后写出数据。

在服务器端,您读取长度,将大量数据读入字节数组,然后从该消息中反序列化。传入流仅用于读取消息,而不是对象。