我試圖通過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