当前位置:首页 > 操作系统 > Windows

Windows 网络编程(2)--重叠I/0模型

5).重叠I/O模式(overlapped)

常用函素:
1.WSASocket : 创建套接字
2.TCP
WSASend
WSARecv
3.UDP:
WSASendTo
WSARecvFrom
4.AccepEx (Mswsock.lib库导出)
WSAIoctl
5.数据类型
WSAOVERLAPPED (wsaoverlapped)
函数: WSAGetOverlappedResult

使用:

缓冲区对象

            <code>typedef <span>struct</span> _BUFFER_OBJ
{   
    OVERLAPPED     ol;          <span>// 重叠结构</span><span>char</span>     *buff;             <span>// send/recv/AcceptEx所使用的缓冲区</span><span>int</span> nLen;               <span>// buff的长度</span>
    PSOCKET_OBJ pSocket;    <span>// 此I/O所属的套节字对象</span><span>int</span> nOperation;         <span>// 提交的操作类型</span><span>#<span>define</span> OP_ACCEPT  1</span><span>#<span>define</span> OP_READ        2</span><span>#<span>define</span> OP_WRITE   3</span>

    SOCKET sAccept;         <span>// 用来保存AcceptEx接受的客户套节字(仅对监听套节字而言)</span>
    _BUFFER_OBJ *pNext;
} BUFFER_OBJ, *PBUFFER_OBJ;</code>
        

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

原文:http://blog.csdn.net/xingkongyingke/article/details/45228193


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐