Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在通过UDP套接字发送大型图像时抛出解析完成之前遇到的流结束_C#_Image_Exception_Udp_Deserialization - Fatal编程技术网

C# 在通过UDP套接字发送大型图像时抛出解析完成之前遇到的流结束

C# 在通过UDP套接字发送大型图像时抛出解析完成之前遇到的流结束,c#,image,exception,udp,deserialization,C#,Image,Exception,Udp,Deserialization,我正在通过UDP套接字以序列化复杂对象的形式发送Jpeg编码的图像。由于UDP数据报支持最大长度为52KB到54KB,我正在将到达的数据报写入内存流,以便立即对其进行反序列化 接收端代码: while (AccumulatingBytes <= TotalSizeOfComplexObject)//Size of Complex Object after Serialization which I get through TCP// { byte[] Recievedbytes =

我正在通过UDP套接字以序列化复杂对象的形式发送Jpeg编码的图像。由于UDP数据报支持最大长度为52KB到54KB,我正在将到达的数据报写入内存流,以便立即对其进行反序列化

接收端代码:

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;
}

while(累计字节您是否一直在0位置写入字节流

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

也许您需要的不是零位变量累加字节数?

您是否一直在零位写入字节流

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

也许你需要的不是零位变量累加字节?

一些明显的观察结果可能会有帮助

  • 为什么每次循环中都会出现一个新的
    MemoryStream
    ?这是最直接的问题
  • 为什么不
    acculatingbytes+=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=newmemoryStream();

而(累计字节一些明显的观察结果可能有助于

  • 为什么每次循环中都会出现一个新的
    MemoryStream
    ?这是最直接的问题
  • 为什么不
    acculatingbytes+=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=newmemoryStream();

while(如果反序列化流而不通过网络发送,则累积字节数是否有效?如果反序列化流而不通过网络发送,则是否有效?否,即从第1个(第0个)开始写入
receivedbytes
)数组的字节;它不影响写入位置。确切地说,每次用新数据填充ReceivedBytes数组时。不,这是从数组的第一个(第零个)字节写入
ReceivedBytes
;它不影响写入位置。确切地说,每次用新数据填充ReceivedBytes数组时。