最近在做乙個tcp通訊專案時,用到了slip(serial line internet protocol,序列線路網際協議)協議。該協議我就不介紹了網上資料一大堆。
通訊資料報採用了簡單的幀封裝結構,此協議基於slip(serial line ip,序列線路ip協議,具體內容參見rfc1055),但加入乙個校驗(checksum)位元組,其值為除首尾end字元外的所有字元位元組按位和。
這裡面遇到了兩個問題:
1,如何計算校驗和,因為以前沒做過查了很多資料才弄明白。就是第一位與第二位異或,得出的結果再與第三位異或!
資料校驗 --bcc異或校驗法(block check character)
^ 運算子(c# 參考)
2,傳送報文定義的陣列大小都是固定484,但是有時候實際大小用不到,可能只用到38個長度,後面就剩下很多空的,這個時候我需要把38個位元組的陣列取出來,其他的不需要。
報文封裝**:
byte end_char = 0xc0; /* 分組結束標記 */
byte esc_char = 0xdb; /* 填充位元組標記*/
byte esc_end = 0xdc; /* esc esc_end 表示資料位元組end */
byte esc_esc = 0xdd; /* esc esc_esc 表示資料位元組esc */
/// /// 報文封裝
///
/// 需要合併的陣列
/// 新的陣列,用來傳送報文
private void setoutbuf(byte inbuf, ref byte outbuf)
}outbuf[index++] = chverify;
// tail end_char
outbuf[index++] = end_char;
//獲取我需要的實際的報文資料
ienumerablerefbuf = outbuf.take(index);
outbuf = refbuf.toarray();
}
Http介面封裝Mqtt協議 C
icache icache 是客戶端連線成功時觸發的事件 mqttclient.connected connected 是客戶端斷開連線時觸發的事件 mqttclient.disconnected disconnected 連線伺服器 mqttclient.connectasync options ...
使用C與C 混合程式設計封裝UDP協議
引入標頭檔案,匯入lib檔案 include include include include pragma comment lib,ws2 32.lib 2.在標頭檔案中宣告,由於是c 中呼叫c 需要使用extern關鍵字 3.傳送方的實現 st socket af inet,sock dgram,...
C 自定義協議的封裝與解析
1 定義結構體 internal class receivemsginfo 傳送文字 structlayout layoutkind.sequential,pack 4 public class textmesinfo 對於byte型別資料,要定義其元素數量 即位元組數 建立結構體時要建立其大小,以...