基於重疊IO模型的 回顯TCP伺服器設計

2022-02-06 02:38:24 字數 2120 閱讀 1520

---------------------1 套接字物件----------------------

為每個套接字建立乙個socket_obj物件,記錄與之相關的資訊。

typedef struct

_socket_objsocket_obj,*psocket_obj;

所有重疊io提交到特定的套接字上,釋放對應套接字物件,必須保證此套接字再沒有重疊io,即noutstandingops=0

申請套接字物件,釋放套接字物件的函式

psocket_obj getsocketobj(socket s)

void

freesocketobj(psocket_obj psocket)

---------------------2 緩衝區物件---------------------

緩衝區物件socket_obj,記錄重疊io的所有屬性

typedef struct

_buffer_objbuffer_obj,*pbuffer_obj;

pnext將buffer_obj物件練成乙個鍊錶

事件控制代碼陣列 和 鍊錶位址

handle g_events[wsa_maximum_wait_events];

int g_nbuffercount;//

數量pbuffer_obj g_pbufferhead,g_pbuffertail;//

位址

呼叫重疊io函式之前,都要申請buffer_obj物件,記錄資訊。io完成後,再釋放buffer_obj物件

申請buffer_obj物件 的函式:

pbuffer_obj getbufferobj(psocket_obj psocket,ulong nlen)

else

g_events[++g_nbuffercount] = pbuffer->ol.hevent;

}return

pbuffer;

}

釋放buffer_obj物件函式:

void

freebufferobj(pbuffer_obj pbuffer)

else

}//釋放它占用的空間

if(bfind)

}

提交重疊io,傳遞引數有重疊結構io和緩衝區指標buff。在io完成後,得到的是受信事件物件的控制代碼。根據這個控制代碼找到對應的buffer_obj物件。

查詢buffer_obj物件的**:

pbuffer_obj findbufferobj(handle hevent)

return

pbuffer;

}

更新時間控制代碼陣列g_events中的內容:

void

rebuildarray()

}

---------------------3 提交重疊io---------------------

投遞io之後,執行緒在重疊io事件上等待,一旦io事件物件受信,等待函式就會返回

提交接受連線的buffer_obj物件**:

bool postaccept(pbuffer_obj pbuffer)

return

true;

}return

false;

};

接收資料的buffer_obj物件**:

bool postrecv(pbuffer_obj pbuffer)

return

true;

}

傳送資料額buffer-obj物件**:

bool postsend(pbuffer_obj pbuffer)

return

true;

}

---------------------4 主函式---------------------

隨筆 重疊I O模型的程式設計框架

include include include include include pragma comment lib,ws2 32.lib define default buflen 512 define default port 27015 int tmain 建立監聽套接字 if severso...

基於錯誤回顯的sql注入整理

由於複習,停了好幾天,今天換換模式做了一下關於錯誤回顯的ctf題目,首先附上題目 here 0x00 關於錯誤回顯 用我自己的話來講,基於錯誤回顯的sql注入就是通過sql語句的矛盾性來使資料被回顯到頁面上 當然在實際應用中得能回顯在頁面上,一般的 都回避免這種情況,哈哈,要是能碰上你就偷著樂吧 0...

乙個基於UDP的回顯C S 二

解決問題 通過connect,使伺服器端意外崩潰,重啟,客戶端能通過read函式而得知 伺服器端 vi s4.c include include include include include include include define serv port 9877 define maxline ...