日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java socket 包头包体_自定义协议封装包头、包体

發布時間:2023/11/27 生活经验 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java socket 包头包体_自定义协议封装包头、包体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 usingSystem;2 usingSystem.Collections.Generic;3 usingSystem.IO;4 usingSystem.Text;5

6 //消息解析器

7 public classMarshalEndian8 {9 //用于存儲剩余未解析的字節數

10 private List _LBuff = new List(2);11 //默認是utf8的編碼格式

12 private UTF8Encoding utf8 = newUTF8Encoding();13

14 //包頭1

15 const Int16 t1 = 0x55;16 //包頭2

17 const Int16 t2 = 0xAA;18 //字節數常量 兩個包頭4個字節,一個消息id4個字節,封裝消息長度 int32 4個字節

19 const Int32 ConstLenght = 8;20

21 public voidDispose()22 {23 this.Dispose(true);24 GC.SuppressFinalize(this);25 }26

27 protected virtual void Dispose(boolflag1)28 {29 if(flag1)30 {31 IDisposable disposable2 = this.utf8 asIDisposable;32 if (disposable2 != null) { disposable2.Dispose(); }33 IDisposable disposable = this._LBuff asIDisposable;34 if (disposable != null) { disposable.Dispose(); }35 }36 }37

38 public byte[] Encode(TSocketMessage msg)39 {40 MemoryStream ms = newMemoryStream();41 BinaryWriter bw = new BinaryWriter(ms, newUTF8Encoding());42 byte[] msgBuffer =msg.MsgBuffer;43

44 #region 封裝包頭

45 bw.Write((Int16)t1);46 bw.Write((Int16)t2);47 #endregion

48

49 #region 包協議

50 if (msgBuffer != null)51 {52 bw.Write((Int32)(msgBuffer.Length + 4));53 bw.Write(msg.MsgID);54 bw.Write(msgBuffer);55 }56 else { bw.Write((Int32)0); }57 #endregion

58

59 bw.Close();60 ms.Close();61 bw.Dispose();62 ms.Dispose();63 returnms.ToArray();64 }65

66 public List GetDcAppMess(byte[] buff, intlen)67 {68 //拷貝本次的有效字節

69 byte[] _b = new byte[len];70 Array.Copy(buff, 0, _b, 0, _b.Length);71 buff =_b;72 if (this._LBuff.Count > 0)73 {74 //拷貝之前遺留的字節

75 this._LBuff.AddRange(_b);76 buff = this._LBuff.ToArray();77 this._LBuff.Clear();78 this._LBuff = new List(2);79 }80

81 List list = new List();82 MemoryStream ms = newMemoryStream(buff);83 BinaryReader buffers = new BinaryReader(ms, this.utf8);84 try

85 {86 byte[] _buff;87 Label_00983:88

89 #region 包頭讀取

90 //循環讀取包頭91 //判斷本次解析的字節是否滿足常量字節數

92 if ((buffers.BaseStream.Length - buffers.BaseStream.Position)

106

107 #region 包協議

108 int offset =buffers.ReadInt32();109 #endregion

110

111 #region 包解析

112 //剩余字節數大于本次需要讀取的字節數

113 if (offset <= (buffers.BaseStream.Length -buffers.BaseStream.Position))114 {115 int msgID =buffers.ReadInt32();116 _buff = buffers.ReadBytes(offset - 4);117 list.Add(newTSocketMessage(msgID, _buff));118 if ((buffers.BaseStream.Length - buffers.BaseStream.Position) > 0)119 {120 gotoLabel_00983;121 }122 }123 else

124 {125 //剩余字節數剛好小于本次讀取的字節數 存起來,等待接受剩余字節數一起解析

126 _buff = buffers.ReadBytes((int)(buffers.BaseStream.Length - buffers.BaseStream.Position +ConstLenght));127 this._LBuff.AddRange(_buff);128 }129 #endregion

130 }131 catch(Exception ex) { Console.WriteLine(ex); }132 finally

133 {134 if (buffers != null) { buffers.Dispose(); }135 buffers.Close();136 if (buffers != null) { buffers.Dispose(); }137 ms.Close();138 if (ms != null) { ms.Dispose(); }139 }140 returnlist;141 }142 }

總結

以上是生活随笔為你收集整理的java socket 包头包体_自定义协议封装包头、包体的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。