SOCKET中RECV第二次不能阻塞 请高手指教 只顶不给分
服务器客户端建立链接成功,客户端send数据服务器能接受处理,然后服务器tcpServer->Send调用CTcpServer::Send向客户端发送数据,客服端第一次用recv可以阻塞接受数据,但客服端第二次就不能阻塞接受数据了 请问是什么原因?
客户端:
iSend = send(client, (char *)reqPackData, iLen, 0); 第一步:这里先给服务器发送数据
iRecv = recv(client, buff, 1024, 0); 第三步:客户端接受到结构数据处理,这里可以阻塞接受
if (reqPackData->ReqNo == ((ReqPack *)buff)->ReqNo)
{
iRecv = recv(client, buff, 1024, 0); 第五步:应该是接受服务器发送的偏移地址数据,但这步没有阻塞没有接受
}
服务器端:
tcpServer->Send(s, (char *)reqPack, sizeof(ReqPack)); 第二步:服务器处理数据后调用CTcpServer::Send发送结构数据给客服端
tcpServer->Send(s, pCom+reqPack->dwoffset, reqPack->dwSize); 第四步:服务器发送偏移地址数据给客服端
、、、、、、、、、、、、、、、、、、、、、、、、、、、
int CTcpServer::Send(SOCKET s, char *buf, DWORD size)
{
、、、、、、、、、、、、、、、、、、、、、、、、、、、
iSend = WSASend(s, &(PerIoData->DataBuf), 1, &SendBytes, Flags, &(PerIoData->Overlapped), NULL);
、、、、、、、、、、、、、、、、、、、、、、、、、、、
}
开发环境VC.NET2005 那里人气太差了 借本版宝地 请高手指点