2012-01-23 29 views
1

我送JPEG編碼圖片系列化複合物在UDP套接字 ..As UDP數據報最大支持。長度爲52KB至54KB,I m將到達的Datagrams寫入內存流,我可以立即對其進行反序列化。尾流中遇到的完成之前解析拋出發送大圖片在UDP套接字

接收器端編碼:

while (AccumulatingBytes <= TotalSizeOfComplexObject)//Size of Complex Object after Serialization which I get through TCP// 
{ 
    byte[] Recievedbytes = UdpListener.Receive(ref RemoteEndPoint);//I m Sending fixed size of 204 NUMBER OF BYTES 

    ImageStream = new MemoryStream(); 
    ImageStream.Position = (long)AccumulatingBytes; 
    ImageStream.Write(Recievedbytes, 0, Recievedbytes.Length); 

    AccumulatingBytes += 204; 
} 

當我反序列化此Memory Stream Exception被拋出。

+0

如果您反序列化流而不通過網絡發送它是否有效? – CodingBarfield

回答

1

一些明顯的觀察,可以幫助...

  • 爲什麼在環新MemoryStream每一次?這是最直接的問題
  • 爲什麼不AccumulatingBytes += Receivedbytes.Length;

也;如果您不是自己處理錯誤和丟失數據,請使用TCP。

因此,像:

ImageStream = new MemoryStream(); 
while (AccumulatingBytes <= TotalSizeOfComplexObject) 
{ 
    byte[] Recievedbytes = UdpListener.Receive(ref RemoteEndPoint); 

    ImageStream.Write(Recievedbytes, 0, Recievedbytes.Length); 

    AccumulatingBytes += Recievedbytes.Length; 
} 

然後反序列化之前設置ImageStream.Position = 0。你也應該檢查一下UdpListener沒有報告EOF。

0

你是否一直在0位寫字節流?

ImageStream.Write(Recievedbytes, 0, Recievedbytes.Length); 

也許你需要而不是零地點變量AccumulatingBytes?

+0

不,這是從數組的第1(0)字節寫入'Recievedbytes';它不影響它的寫入位置。 –

+0

Exactly.Every Time使用新數據填充Receiviedbytes數組。 – Samie

相關問題