C 自定義協議的封裝與解析

2021-09-01 13:01:33 字數 816 閱讀 7913

1、 定義結構體

internal class receivemsginfo

}/// /// 傳送文字

///

[structlayout(layoutkind.sequential, pack = 4)]

public class textmesinfo

}

對於byte型別資料,要定義其元素數量(即位元組數),建立結構體時要建立其大小,以便後面copyto函式使用。

2、 封裝

2.1 將payload結構體封裝為byte

intptr paramptr = marshal.allochglobal(marshal.sizeof(typeof(payload結構體類));

//定義乙個payload結構體大小的記憶體空間(非委託)

2.2將結構體轉換為非委託指標空間

marshal.structuretoptr(payload結構體類, paramptr,true);
2.3將非委託指標空間存到byte

marshal.copy();
備註:

1、 結構體新建時必須宣告其大小(對於byte型別而言,int型別本身已有指定);

2、 將值賦到結構體byte時,採用array.copyto(); 這樣的話結構體長度不會變;

3、 用完後記得釋放分配記憶體空間,因為是非委託模式

marshal.freehglobal(intptr名稱);
3、 解析

自定義協議封裝包頭 包體

底層通訊訊息類,定義訊息id 訊息體,和初始化 1 using system 23 4 底層通訊訊息 5 6 public class tsocketmessage idisposable 7 2223 public void dispose 24 2829 protected virtual vo...

自定義 如何自定義協議

何為自定義協議,其實是相對標準協議來說的,這裡主要針對的是應用層協議 常見的標準的應用層協議如http ftp smtp等,如果我們在網路通訊的過程中不去使用這些標準協議,那就需要自定義協議,比如我們常用的rpc框架 dubbo,thrift 分布式快取 redis,memcached 等都是自定義...

Arduino自定義通訊協議解析

給出了通訊協議的設計。通訊協議的格式如下 協議首部 指令長度 控制指令 校驗和 控制指令 設計成如下格式 裝置型別 裝置號埠號 比如說上位機傳送如下的格式的資料 aa0305020106,意思就是協議的首部為aa,指令長度為03,控制指令為050201 實際意義就是裝置型別為05,裝置號為02,埠為...