我试图通过ArrayList
绑定声音和图像序列数据,以使其同步并通过二进制格式化器将其序列化,以通过网络流发送。
服务器端抛出异常:
STREAM不支持寻求操作。
为了同步通过单个网络流实例发送的对象,我应该怎么做
答案 0 :(得分:3)
TCP是基于流的,而不是基于消息的(如UDP所示)。这意味着没有告知消息何时开始或结束。 TCP仅保证以正确的顺序接收所有字节。它不保证一个Send()
发送的所有内容都将通过一个Receive()
收到。
因此,您需要指定某种消息识别机制。在这种情况下,标题是Jon建议的方式。
但是,您需要了解可能无法立即接收整个标头。这两条消息可能会立即到达。因此,您需要在将任何内容发送到BinaryFormatter
以进行反序列化之前解析收到的缓冲区。
答案 1 :(得分:2)
我会将你要发送的每个对象拆分成一个单独的“消息”,其中一条消息由(比方说)4个字节组成,表示体长,然后是身体本身。
如果要发送序列化对象,则序列化为字节数组,写出长度,然后写出数据。
在服务器端,您读取长度,将大量数据读入字节数组,然后从该消息中反序列化。传入流仅用于读取消息,而不是对象。