List<byte> buffer = new List<byte>();//接收缓存
if (socket.Connected)
{
while (true)
{
try
{
int rev_length = 0;//接收长度
byte[] rev_bytes = new byte[1024 * 1024]; //设置接收的大小
rev_length = this.socket.Receive(rev_bytes);//接收
using (MemoryStream ms = new MemoryStream(rev_bytes))
{
using (BinaryReader br = new BinaryReader(ms))
{
buffer.AddRange(br.ReadBytes(rev_length));//得到有用数组
}
}
if (buffer.Count > 0)
{
using (MemoryStream ms = new MemoryStream(buffer.ToArray()))
{
using (BinaryReader br = new BinaryReader(ms))
{
//判断是否是正确的数据包,不符合清除缓存
if (buffer[0] != 0xFF && buffer[1] != 0xFF && buffer[2] != 0xFF)
{
buffer.Clear();
}
else
{
//获取头部
byte[] heads = br.ReadBytes(3);
int len = br.ReadInt32();
//获取数据包长度
if (buffer.Count < len + 10)
{
continue;
}
else
{
byte[] mData = br.ReadBytes(len);//得到真实jpg数据包
showScreen.Image = new Bitmap(new MemoryStream(mData, true));//显示到屏幕
buffer.RemoveRange(0, len + 10);//移除缓存区内容
}
}
}
}
}