码迷,mamicode.com
首页 > 其他好文 > 详细

根据首尾字节的tcp分包断包算法

时间:2014-07-16 19:51:05      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   color   数据   for   

这个算是我的一点小总结吧,放出来分享给大家,原来在网上找这种算法都找了N久没找到,自己写也是走了许多弯路,就放出来遛一遛吧

 大家将就这个看看, 这是其中的一个主要的方法,其余的我就不放出来了,其中的IndexTag和endTag分别是首尾字节

 1  public List<Gnss808RequesInfo> Filter(ref byte[] message)
 2         {
 3             var list = new List<Gnss808RequesInfo>();
 4             //是否退出循环
 5             var isBreak = false;
 6             while (true)
 7             {
 8                 //如果缓冲区字节数组为空或者长度为小于1
 9                 if (isBreak || message == null)
10                 {
11                     break;
12                 }
13                 //首指针
14                 var flag = -1;
15                 for (var i = 0; i < message.Length; i++)
16                 {
17                     //判断首标识是否正确
18                     if (i - flag == 1 && message[i] != IndexTag)
19                     {
20                         message = null;
21                         LogHelper.Instance.Add("分包不正确,丢弃字节");
22                         break;
23                     }
24                     //如果是结束字符(且不为首字节,区分如果首标识和尾标识相同的情况)
25                     if (i - flag != 1 && message[i] == EndTag)
26                     {
27                         var data = new byte[i - flag];
28                         Array.Copy(message, flag + 1, data, 0, i - flag);
29                         //这个地方其实已经收到一个完整的数据包了
30                         //下面的重载的方法生成规定的数据格式的接口
31                         var request = Filter(data);
32                         if (request != null)
33                         {
34                             list.Add(request);
35                         }
36                         flag = i;
37                     }
38                     //该为最后一个字节
39                     if (i == message.Length - 1)
40                     {
41                         if (flag == i)
42                         {
43                             message = null;
44                         }
45                         else
46                         {
47                             //未接收完整的数据包
48                             var data = new byte[message.Length - flag - 1];
49                             Array.Copy(message, flag + 1, data, 0, data.Length);
50                             message = data;
51                            // LogHelper.Instance.Add(string.Format("未知:{0}", CommonFunction.GetBcdCodeString(message, 0, message.Length)));
52                         }
53                         //退出循环
54                         isBreak = true;
55                         break;
56                     }
57                 }
58             }
59             return list;
60         }

 

根据首尾字节的tcp分包断包算法,布布扣,bubuko.com

根据首尾字节的tcp分包断包算法

标签:des   style   blog   color   数据   for   

原文地址:http://www.cnblogs.com/songjingsong/p/3837118.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!