Windows 網路編程(2)--重疊I/0模型

來源:互聯網
上載者:User

標籤: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模型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.