IOCP 二進位制協議 分包

2021-07-25 21:45:53 字數 1281 閱讀 5400

一、iocp 二進位制協議分包的思路

解析資料頭,獲取協議包體的大小,判斷是否收到乙個完整的資料頭,

如果不是,繼續投遞recv請求,直到收到乙個資料頭

異常的資料報,關閉session (pkg_size > max_pkg_size)

全部資料收到,進行處理.

1 判斷long_pkg是否存在,如果存在,就要釋放

2.如果收到資料 > pkg_size,io_data->pkg指向正確的位置

3.如果收到資料 = 0,那麼就繼續投遞recv請求

沒有收到全部資料

1.pkg_size > max_recv_size,那麼就申請記憶體空間!存放pkg,否則繼續收資料

2.繼續投遞請求

二、**實現

1.獲取收到的資料的長度

static

int read_header(unsigned

char* header, int len, int* pkg_size)

int size = (header[0]) | (header[1] << 8);

*pkg_size = size;

return

0;}

2.接受資料的結構
struct io_package ;
3.對收到資料進行分包
case iocp_recv: 

if (pkg_size > max_pkg_size)

if (io_data->recved >= pkg_size)

if (io_data->recved > pkg_size)

io_data->recved -= pkg_size;

if (io_data->recved ==

0) }

else

io_data->wsabuffer.buf = io_data->long_pkg + io_data->recved;

io_data->wsabuffer.len = pkg_size - io_data->recved;

}else

// 當讀的請求完成後,你必須要再加乙個讀的請求;

dword dwrecv =

0; dword dwflags =

0; int ret = wsarecv(s->c_sock, &(io_data->wsabuffer),

1, &dwrecv, &dwflags,

break;}}

}

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...

判斷二進位製半整數(二進位制)

10年後,tokitsukaze大佬已經變成了年收入超百萬的的精英程式設計師,家裡沒錢也沒礦的teitoku,找tokitsukaze大佬借1000塊錢,然後tokitsukaze大佬說,借你1024吧,湊個整數。沒錯在2進製下1024是 二進位制整數 乙個正整數滿足其值為2的k次方 k為正整數 我...

mysql二進位制 MySql二進位制連線方式詳解

使用mysql二進位制方式連線 您可以使用mysql二進位制方式進入到mysql命令提示符下來連線mysql資料庫。例項以下是從命令列中連線mysql伺服器的簡單例項 root host mysql u root p enter password 在登入成功後會出現 mysql 命令提示視窗,你可以...