如何检查,发送端流的长度和客户端接收的长度是否一致?

解决方案 »

  1.   

    同样期待指点另外,我采用过两种方式对待同样问题1.发送端先发送数据长度,再发送实际数据,接收端先接受长度,然后根据长度读取数据发送端                  byte[] buffer = new byte[inputStream.Length]; 
                    inputStream.Position = 0; 
                    inputStream.Read(buffer, 0, buffer.Length); 
                    this.socket.Send(BitConverter.GetBytes(buffer.Length), 0, sizeof(int), SocketFlags.None); 
                    this.socket.Send(buffer, 0, buffer.Length, SocketFlags.None); 接收端                byte[] size = new byte[sizeof(int)]; 
                    this.socket.Receive(size, 0, size.Length, SocketFlags.None); 
                    byte[] buffer = new byte[BitConverter.ToInt32(size, 0)]; 
                    this.socket.Receive(buffer, 0, buffer.Length, SocketFlags.None); 
                    return new MemoryStream(buffer, 0, buffer.Length); 2.分包处理,每次发送固定长度的数据,数据的前4个字节表示数据是否传输完毕Int32 amount = 0; 
                Byte[] head = new Byte[4]; 
                Byte[] content = new Byte[4096]; 
                Byte[] message = new Byte[4100]; 
                try 
                { 
                    while (amount < memStream.Length && stream.CanWrite) 
                    { 
                        Int32 bytes = memStream.Read(content, 0, 4096); 
                        head = BitConverter.GetBytes(bytes); 
                        head.CopyTo(message, 0); 
                        content.CopyTo(message, 4); 
                        stream.Write(message, 0, 4100); 
                        amount += bytes; 
                    } 
                    message.Initialize(); 
                    BitConverter.GetBytes(0).CopyTo(message, 0); 
                    stream.Write(message, 0, 4100);在VPN中,上面的代码还可以,不过并不稳定,时常还是会发生错误;在拨号网络中的效果就更让人不能接受了,接收到的数据常常是错乱的。