最近在使用tcp通讯,发现有时候会出现粘包的情况
想个了方法 在报文中添加字头字尾 client接收到byte时候使用特定byte去截取
写了个方法 看明白之后 byte 字符 等相互转换应该会明白一点
/// <summary> /// 移除字头字尾 /// </summary> /// <param name="arr">byte数组</param> /// <param name="STX">字头</param> /// <param name="ETX">字尾</param> /// <returns></returns> public static List<byte[]> Split_STX_ETX(byte[] arr, byte STX = 0x02, byte ETX = 0x03) { var Data = new List<byte[]>(); var tmpArr = new List<byte>(); for (int i = 0; i < arr.Length; i++) { //去掉字头 if (arr[i] == STX) { continue; } //去掉字尾 if (arr[i] == ETX) { Data.Add(tmpArr.ToArray()); tmpArr.Clear(); continue; } tmpArr.Add(arr[i]); } return Data; } /// <summary> /// 字符串添加字头字尾 /// </summary> /// <param name="str">需要处理的字符串</param> /// <param name="STX">字头</param> /// <param name="ETX">字尾</param> /// <returns></returns> public static byte[] Add_STX_ETX(string str, byte STX = 0x02, byte ETX = 0x03) { var byteArr = Encoding.Default.GetBytes(str); var tmpArr = new List<byte> { STX }; tmpArr.AddRange(byteArr); tmpArr.Add(ETX); return tmpArr.ToArray(); }
标签:C#,ETX,字头,字尾,byte,STX,tmpArr From: https://www.cnblogs.com/Echoxxx/p/17114360.html