2013-06-03 35 views
2

我有一個ObservableCollection<MyClass>,我序列化其內容並使用套接字發送它。請遵循以下代碼:具有「動態」字節大小的接收套接字

private const int Port = 3762; 
private static SocketPermission permission = new SocketPermission(NetworkAccess.Accept, TransportType.Tcp, "", Port); 
private static IPHostEntry ipEntry = Dns.GetHostEntry(string.Empty); 
private static IPAddress ipAddress = ipEntry.AddressList[0]; 
private static IPEndPoint ipPoint = new IPEndPoint(ipAddress, Port); 

Socket sTransmissao = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); 

using (var stream = new MemoryStream()) 
{ 
    var binary = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 
    binary.Serialize(stream, TransmissaoPendencias); 
    byte[] bArray = new byte[stream.Length]; 
    stream.Seek(0, SeekOrigin.Begin); 
    stream.Read(bArray, 0, (int)stream.Length); 

    sTransmissao.Connect(ipAddress, Port); 
    sTransmissao.Send(bArray); 
} 

但是,字節長度將隨我的集合中的項目數量而變化。

在客戶端檢索這些信息的可行解決方案是什麼?

在此先感謝。

回答

3

您需要在發送數組之前傳送大小,以便另一端知道要讀多少。

+0

我該怎麼做?我需要兩個聽衆?我對套接字比較陌生。你能給我一個例子,或者將我鏈接到它的教程?謝謝。 –

+0

幾分鐘後,我意識到這是我評論的多麼愚蠢。剛纔我注意到了SendBufferSize和ReceiveBufferSize。感謝老兄,併爲最後的評論感到抱歉。 –

+0

@AndréSilva:那根本不是我的意思。在傳輸字節之前,將大小傳輸爲四字節整數。 – SLaks

相關問題