↓ ↓ ↓注意:阅读本文章需要有一定的winsock开发基础,例程源码在最下面↓ ↓ ↓
IOCP的重点来了,同步模型的Recv操作是同步的,需要等待接到消息或者超时后才返回,但IOCP模型的是投递一个Recv操作 注意是投递!
WSARecv() 用于接收套接口的消息
参数1:s 客户的套接字
参数2:pBuffers 一个WSABUF结构 WSABUF 有2个成员 成员1:len 表明缓冲区长度 成员2:一个指针地址 指向接收数据的缓冲区 这个参数可以是一个数组 因为他可以一次接收多个消息。或者你也可以不传入数组到那下面的参数将要设置为1
参数3:wBufferCount WSABUF数组的数量
参数4:lpFlags 和用来控制套接字的行为 通常设置为0
参数5:lpOverlapped 重叠结构指针地址 重要! 下面讲解
参数6:lpCompletionRoutine 这个我们之间设置0 不管他
GetQueuedCompletionStatus() 用于接收IOCP的消息参数1:CompletionPort IOCP
参数2:NumberOfBytesTransferred 整数型传址 用于接收IOCP得到的消息的长度
参数3:CompletionKey 这类似一个线程中的参数 是由 PostQueuedCompletionStatus()传递过来的
参数4:lpOverlapped 重叠结构指针地址
参数5:dwMilliseconds 超时时间 -1表示无限等待
.数据类型 OVERLAPPED
.成员 Internal, 整数型
.成员 InternalHigh, 整数型
.成员 offset, 整数型
.成员 OffsetHigh, 整数型
.成员 hEvent, 整数型
OVERLAPPED 结构 20字节 这是固定的必须的 留给操作系统 我们不管
MsgType 消息类型,用于我们区分是AcceptEx投递的操作还是WSARecv等投递的操作 4字节 整数型
C_Socket 存放客户套接字 4字节 整数型
PeerAddr 远端客户的地址信息 16字节
Buf_Ptr 缓冲区的内存指针地址 4字节 整数型
WSARecv (C_Sock, WSABuf, 1, NumberOfBytesRecvd, Flags, Overlapped, 0)
AcceptEx()
参数1:sListenSocket 服务监听的套接字
参数2:sAcceptSocket 一个将用于新客户的套接字
参数3:lpOutputBuffer 一个内存缓冲区 这个内存缓冲区将用于接收客户的地址信息 和接收客户发来的第一条消息 (如果指定了的话) 这个参数必须指定 否则将返回错误
参数4:dwReceiveDataLength 指定欲接收来自新客户的第一条消息的缓冲区长度 若此值是零 则windows不会等待新客户的第一条消息 而是立即建立连接
参数5:dwLocalAddressLength 为本地地址信息保留的字节数。此值必须比所用传输协yi的最大地址大小长16个字节。
参数6:dwRemoteAddressLength为远程地址的信息保留的字节数。此值必须比所用传输协yi的最大地址大小长16个字节。 该值不能为0。
参数7:dwBytesReceived 此参数只在同步模式下起作用,所以我们直接给个0
参数8:lpOverlapped 重叠结构指针地址
PostQueuedCompletionStatus()
参数1:CompletionPort IOCP
参数2:dwNumberOfBytesTransferred 指定发送的消息的字节数
参数3:dwCompletionKey 这类似于线程的参数,将会传递到GetQueuedCompletionStatus()中的参数CompletionKey
参数4:lpOverlapped 重叠结构指针地址
WSASend()
参数
s:标识一个已连接套接口的描述字。
lpBuffers:一个指向WSABUF结构数组的指针。每个WSABUF结构包含缓冲区的指针和缓冲区的大小。
dwBufferCount:lpBuffers数组中WSABUF结构的数目。
lpNumberOfBytesSent:如果发送操作立即完成,则为一个指向所发送数据字节数的指针。
dwFlags:标志位。
lpOverlapped:重叠结构指针
lpCompletionRoutine:一个指向发送操作完成后调用的完成例程的指针。(对于非重叠套接口则忽略)。
oldlee 发表于 2016-1-17 23:16
我去。。翻到最后才看到小白熊。。小白熊不是已经删了么,他说他不想装这个逼了。。
欢迎光临 精易论坛 (https://125.confly.eu.org/) | Powered by Discuz! X3.4 |