1 try
2 {
3 byte[] buffer = UDPClient.Receive(ref _udpOpto.localPoint);
4 numberOfBytesRead = 0;
5 numberOfBytesRead = buffer.Length;
6 receiveBuffer = new byte[numberOfBytesRead];
7 Array.Copy(buffer, 0, receiveBuffer, 0, numberOfBytesRead);
8 Array.Clear(buffer, 0, receiveBuffer.Length);
9
10 //断包处理
11 if (bodyWriteIndex > 0)
12 {
13 int writeLength = Math.Min(bodyLength, numberOfBytesRead);
14 Array.Copy(receiveBuffer, 0, bodyBuffer, bodyWriteIndex, writeLength);
15 readIndex += writeLength;
16 bodyWriteIndex += writeLength;
17 }
18 //新包/粘包
19 else
20 {
21 //验证帧头
22 string s = BitConverter.ToString(receiveBuffer).Replace("-", "");
23 int i = s.IndexOf("AA01");
24 if (i != 0)
25 {
26 return;
27 }
28 int writeLength = Math.Min(bodyLength, numberOfBytesRead - readIndex);
29 bodyBuffer = new byte[bodyLength];
30 Array.Copy(receiveBuffer, readIndex, bodyBuffer, 0, writeLength);
31 readIndex += writeLength;
32 bodyWriteIndex += writeLength;
33 }
34 Array.Clear(receiveBuffer, 0, receiveBuffer.Length);
35
36 //完成一个包
37 if (bodyWriteIndex == bodyLength)
38 {
39 readIndex = 0;
40 bodyWriteIndex = 0;
41 //验收帧头
42 string s = BitConverter.ToString(bodyBuffer).Replace("-", "");
43 int dh = s.IndexOf("AA01");
44 if (dh == 0)
45 {
46 int dSum = 0;
47 for (int i = 0; i<bodyBuffer.Length - 1; i++)
48 {
49 dSum += bodyBuffer[i];
50 }
51 //验证校验码
52 if (dSum % 256 == bodyBuffer[82])
53 {
54 xxModel pm = bufferToModel(bodyBuffer);
55 Array.Clear(bodyBuffer, 0, bodyBuffer.Length);
56 //异步
57 Task.Run(() =>
58 {
59 //存储
60 });
61 }
62 }
63 }
64 }
65 catch (ThreadAbortException ex)
66 {
67 //不作处理
68 }
69 catch (Exception ex)
70 {
71 LogHelper.WriteLog(LogFile.Error, "[错误信息]:" + ex.ToString());
72 }