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)!