WSARecv 百科内容来自于: 百度百科

简介

在重叠模型中,接收数据就要靠它了,它的参数也比recv要多,因为要用到重叠结构嘛,它是这样定义的:
int WSARecv(
SOCKET s, // 当然是投递这个操作的套接字
,与Recv函数不同
// 这里需要一个由WSABUF结构构成的数组
DWORD dwBufferCount, //数组中WSABUF结构的数量
LPDWORD lpNumberOfBytesRecvd, // 如果接收操作立即完成,这里会返回函数调用所接收到的字节数
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine // 完成例程中将会用到的参数,我们这里设置为 NULL
);
返回值:
WSA_IO_PENDING : 最常见的返回值,这是说明我们的WSARecv操作成功了,但是I/O操作还没有完成,所以我们就需要绑定一个事件来通知我们操作何时完成

代码示例

:(变量的定义顺序和上面的说明的顺序是对应的)
SOCKET s;
WSABUFDataBuf; // 定义WSABUF结构的缓冲区
// 初始化一下DataBuf
#defineDATA_BUFSIZE 5096
charbuffer[DATA_BUFSIZE];
ZeroMemory(buffer,DATA_BUFSIZE);
DataBuf.len= DATA_BUFSIZE;
DataBuf.buf= buffer;
DWORDdwBufferCount = 1, dwRecvBytes = 0, Flags = 0;
// 建立需要的重叠结构
WSAOVERLAPPEDAcceptOverlapped ;// 如果要处理多个操作,这里当然需要一个WSAOVERLAPPED数组
WSAEVENTevent; // 如果要多个事件,这里当然也需要一个WSAEVENT数组
// 需要注意的是可能一个SOCKET同时会有一个以上的重叠请求, 也就会对应一个以上的WSAEVENT
Event =WSACreateEvent();
ZeroMemory(&AcceptOverlapped,sizeof(WSAOVERLAPPED));
AcceptOverlapped.hEvent= event; // 最关键的一步,把事件句柄“绑定”到重叠结构上
WSARecv(s,&DataBuf, dwBufferCount, &dwRecvBytes,&Flags,&AcceptOverlapped, NULL); // 使用WSARecv来把请求投递到重叠结构上了|
$firstVoiceSent
- 来自原声例句
小调查
请问您想要如何调整此模块?

感谢您的反馈,我们会尽快进行适当修改!
进来说说原因吧 确定
小调查
请问您想要如何调整此模块?

感谢您的反馈,我们会尽快进行适当修改!
进来说说原因吧 确定