c c 網路協議

2021-09-29 09:12:40 字數 2981 閱讀 1941

#include#include#include#include#include#include#include#include#include#include#include #pragma comment(lib, "wsock32.lib")

using namespace std;

#define max_size3 1509

#define layer3_head_size 9

#define layer2_head_size 5

#define layer1_head_size 3

#define version 0

//報頭

struct layer3head ;

struct layer3msg ;

struct layer2head ;

struct layer2msg ;

struct layer1head ;

struct layer1msg ;

uint16_t id = 0;

vectormcurreserved; //未解碼的位元組流

queuemmsgq; //解析完的協議結構體

//第三層頭部

void headencode3(uint8_t* pdata, layer3msg* pmsg)

//第三層打包

uint8_t* encode3(layer3msg* pmsg, uint16_t& len, uint16_t& seq)

//第二層

void headencode2(uint8_t* pdata, layer2msg* pmsg)

uint8_t* encode2(layer2msg* pmsg, uint16_t& len)

//第一層

void headencode1(uint8_t* pdata, layer1msg* pmsg)

uint8_t* encode1(layer1msg* pmsg, uint16_t& len)

//測試用全域性變數

uint8_t* testpackeg;

uint16_t testpackeglen;

//// 切片,封裝,傳送

void split_encode_send(char* data, int len)

//最後乙個分片

uint16_t msglen = len;

char* subdata = new char[msglen];

memcpy(subdata, data + layer3seq * subdata_size, msglen);

layer3msg msg3;

msg3.body = (uint8_t*)subdata;

uint8_t* pdata3 = encode3(&msg3, msglen, layer3seq);

layer3seq++;

layer2msg msg2;

msg2.body = pdata3;

uint8_t* pdata2 = encode2(&msg2, msglen);

layer1msg msg1;

msg1.body = pdata2;

uint8_t* pdata1 = encode1(&msg1, msglen);

//send(pdata1, msglen) //傳送

//測試用

testpackeglen = msglen;

testpackeg = new uint8_t[msglen];

memcpy(testpackeg, pdata1, msglen);

// id++;

}//解封裝 curlen: 未解析的長度, parserlen: 已解析的長度

//第一層

bool parserhead1(uint8_t** curdata, layer1msg *pmsg, uint16_t &curlen, uint16_t &parserlen)

bool parserbody1(uint8_t** curdata, layer1msg* pmsg, uint16_t& curlen, uint16_t& parserlen)

//第二層

bool parserhead2(uint8_t** curdata, layer2msg* pmsg, uint16_t& curlen, uint16_t& parserlen)

bool parserbody2(uint8_t** curdata, layer2msg* pmsg, uint16_t& curlen, uint16_t& parserlen)

//第三層

bool parserhead3(uint8_t** curdata, layer3msg* pmsg, uint16_t& curlen, uint16_t& parserlen)

bool parserbody3(uint8_t** curdata, layer3msg* pmsg, uint16_t& curlen, uint16_t& parserlen)

bool parser(void* data, uint16_t len)

curlen = mcurreserved.size();

curdata = (uint8_t*)& mcurreserved[0];

layer1msg msg1;

layer2msg msg2;

layer3msg msg3;

while (curlen > 0)

layer3msg* pmsg = new layer3msg;

*pmsg = msg3;

mmsgq.push(pmsg);

mcurreserved.erase(mcurreserved.begin(), mcurreserved.begin() + parserlen); //刪除已被解析的位元組流

return true;

}int main()

網路協議分層 網路協議介紹

現在的網路都採用分層的方式進行工作 高層 包括應用層 表示層 會話層 傳輸層,負責主機之間的資料傳輸 底層 網路層 資料鏈路層 物理層,負責網路資料傳輸 從高層到底層分別是 應用層 提供程式之間的通訊,常見協議有http ftp 表示層 處理資料格式 資料加密等,常見協議有nbssl lpp 會話層...

網路協議 RPC協議

遠端呼叫協議,用於定義服務之間的介面呼叫規範標準 最早的rpc框架之一 1.2.1 外部資料表示法 xdr 規定互動協議的檔案,包括 與古老的rpc協議相比,雙方的soap協議沒必要完全一致 引數順序 引數個數等 更加靈活 也是乙個xml,描述了方法名 服務名 埠 請求引數等資訊,通過在服務位址後加...

網路協議 restful協議

restful api rest風格介面介紹 rest representational state transfer,是一種軟體架構風格,提供一系列限制指導,用於更好的建立web service。符合rest 架構風格的web service 稱為restful web service。其核心是以...