码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2015-04-23 23:34:35      阅读:236      评论:0      收藏:0      [点我收藏+]

标签: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模型

标签:windows   网络   编程   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!