我试图通过ArrayList
绑定声音和图像序列数据,以使其同步并通过二进制格式化程序将其序列化以通过网络流发送。 服务器端抛出异常:TCP套接字,在单个网络流C上发送多个对象#
该流无法支持查找操作。
我应该以同步对象做送过来一个单一的网络流实例
我试图通过ArrayList
绑定声音和图像序列数据,以使其同步并通过二进制格式化程序将其序列化以通过网络流发送。 服务器端抛出异常:TCP套接字,在单个网络流C上发送多个对象#
该流无法支持查找操作。
我应该以同步对象做送过来一个单一的网络流实例
TCP是基于流而不是基于消息的(就像UDP一样)。这意味着消息开始或结束时不知道。 TCP只保证所有字节都以正确的顺序接收。并不保证所有与Send()
一起发送的东西都会收到一个Receive()
。
因此您需要指定某种消息标识机制。在这种情况下,标题是Jon的建议。
但是,您需要了解整个标题可能不会立即被接收。而这两条消息可能会一次到达。因此,在将任何内容发送到BinaryFormatter
进行反序列化之前,您需要解析接收到的缓冲区。
我会分裂每个对象要发送到其中一个消息由一个单独的“消息” (说)4个字节表示身体长度,然后是身体本身。
当你想发送一个序列化的对象时,你将序列化成一个字节数组,写出长度,然后写出数据。
在服务器端,读取长度,将大量数据读入字节数组,然后反序列化该消息。传入流只用于读取消息,而不是对象。
我有两个对象让我们说A和B ...... A包含Mp3帧和B包含位图压缩图像..我绑定了ArrayList中的对象,因为它可以包含它中的对象。然后我序列化它使用BinaryFormatters并通过网络流发送它。但它抛出了我上面列出的例外 – Samie
这是因为一切还没有到。你需要手动建立一个'byte []'缓冲区(或'MemoryStream')。你不能试图反序列化网络流。 – jgauffin