16,473
社区成员
发帖
与我相关
我的任务
分享
bool CXXXX::RecvData(void)
{
DWORD dwBytesRecved; //接收字节数
DWORD dwFlags = 0; //接收标志
ZeroMemory(&m_iReadIO, sizeof(WSAOVERLAPPED)); //重叠结构置0
m_iReadIO.hEvent = WSAEVENT(this);
char recvBuf[MAX_BUF_SIZE];
ZeroMemory(recvBuf, MAX_BUF_SIZE);
wsaRecvBuf.len = MAX_BUF_SIZE;
// wsaRecvBuf.__byte_writableTo(MAX_BUF_SIZE) = recvBuf;
wsaRecvBuf.buf = recvBuf;
//异步接收数据
if (SOCKET_ERROR == WSARecv(m_sockAccpet, &wsaRecvBuf, 1, &dwBytesRecved, &dwFlags, &m_iReadIO, IReadRoutine))
{
if (WSAGetLastError() != ERROR_IO_PENDING)
{
return false;
}
}
return true;
}
// 接收数据
bool CXXXX::RecvData(void)
{
DWORD dwBytesRecved; //接收字节数
DWORD dwFlags = 0; //接收标志
ZeroMemory(&m_iReadIO, sizeof(WSAOVERLAPPED)); //重叠结构置0
m_iReadIO.hEvent = WSAEVENT(this);
char recvBuf[MAX_BUF_SIZE];
ZeroMemory(recvBuf, MAX_BUF_SIZE);
wsaRecvBuf.len = MAX_BUF_SIZE;
// wsaRecvBuf.__byte_writableTo(MAX_BUF_SIZE) = recvBuf;
wsaRecvBuf.buf = recvBuf;
//异步接收数据
if (SOCKET_ERROR == WSARecv(m_sockAccpet, &wsaRecvBuf, 1, &dwBytesRecved, &dwFlags, &m_iReadIO, IReadRoutine))
{
if (WSAGetLastError() != WSA_IO_PENDING)
{
closesocket(m_sockAccpet);
return false;
//continue;
}
}
return true;
}
void CALLBACK CXXXX::IReadRoutine(DWORD dwError, DWORD dwTransferred, LPWSAOVERLAPPED lpOverlapped , DWORD dwFlags)
{
CClientFromShip *pClient = NULL;
pClient = (CClientFromShip*)lpOverlapped->hEvent; //客户端指针
if (dwError != 0 || dwTransferred == 0) //错误处理
{
pClient->m_bDead = true;
return;
}
pClient->HandleData();
}
void CXXXX::HandleData(void)
{
RecvData();
}