標籤:windows 網路 編程
5).重疊I/O模式(overlapped)
常用函素:
1.WSASocket : 建立通訊端
2.TCP
WSASend
WSARecv
3.UDP:
WSASendTo
WSARecvFrom
4.AccepEx (Mswsock.lib庫匯出)
WSAIoctl
5.資料類型
WSAOVERLAPPED (wsaoverlapped)
函數: WSAGetOverlappedResult
使用:
緩衝區對象
typedef struct _BUFFER_OBJ{ OVERLAPPED ol; // 重疊結構 char *buff; // send/recv/AcceptEx所使用的緩衝區 int nLen; // buff的長度 PSOCKET_OBJ pSocket; // 此I/O所屬的套節字對象 int nOperation; // 提交的操作類型 #define OP_ACCEPT 1 #define OP_READ 2 #define OP_WRITE 3 SOCKET sAccept; // 用來儲存AcceptEx接受的客戶套節字(僅對監聽套節字而言) _BUFFER_OBJ *pNext;} BUFFER_OBJ, *PBUFFER_OBJ;
1.定義全域資料
HANDLE g_events[WSA_MAXIMUM_WAIT_EVENTS]; // I/O事件控制代碼數組
int g_nBufferCount; // 上數組中有效控制代碼計數
PBUFFER_OBJ g_pBufferHead, g_pBufferTail; // 記錄緩衝區對象組成的表的地址
2.申請緩衝區
PBUFFER_OBJ GetBufferObj(PSOCKET_OBJ pSocket, ULONG nLen)
3. 釋放緩衝區
void FreeBufferObj(PBUFFER_OBJ pBuffer)
4.根據受信事件對象的控制代碼,尋找對應的BUFFER_OBJ
PBUFFER_OBJ FindBufferObj(HANDLE hEvent)
5.更新事件控制代碼數組g_events
void RebuildArray()
6.接收發送
接收串連的BUFFER_OBJ對象.使用的函數: PostAccept
接收資料的BUFFER_OBJ對象.使用的函數: PostRecv
發送資料的BUFFER_OBJ對象.使用的函數: PostSend
實現步驟:
1. 設定I/O類型,增加套節字上的重疊I/O計數
2. 投遞此重疊I/O
7.I/O請求完成之後, 處理它的函數是HandleI/O
8.main主函數
a)建立監聽通訊端.投遞監聽I/0
b)迴圈處理I/0事件
整理自(Windows網路與通訊程式設計, 王豔平)
代碼地址: http://download.csdn.net/detail/zhaoyc_59211/192329
Windows 網路編程(2)--重疊I/0模型