2012-01-23 19 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

相关问题