消息影射:ON_MESSAGE(WM_SOCKET_NOTIFY, CSocketWnd::OnWinsocketNotify)处理函数
void CSocketWnd::OnWinsocketNotify(WPARAM wParam, LPARAM lParam)
{
if (wParam == 0 && lParam == 0)
return; int nErrorCode = WSAGETSELECTERROR(lParam);
if(m_bResolved) //需要解析主机名
{
if(nErrorCode==0)
m_bResolved = FALSE;
m_pSocket->_OnResolve(nErrorCode);
}
else //已经获取到了主机名,是其他Socket消息
{
if((SOCKET)wParam!=m_pSocket->m_hSocket)
return; switch (WSAGETSELECTEVENT(lParam))
{
case FD_READ: //读
{
DWORD nBytes;
if (!m_pSocket->IOCtl(FIONREAD, &nBytes))
nErrorCode = WSAGetLastError();
if (nBytes != 0 || nErrorCode != 0)
m_pSocket->_OnReceive(nErrorCode);
}
break;
case FD_WRITE: //写
m_pSocket->_OnSend(nErrorCode);
break;
case FD_OOB:
m_pSocket->_OnOOBData(nErrorCode);
break;
case FD_ACCEPT: //接收
m_pSocket->_OnAccept(nErrorCode);
break;
case FD_CONNECT: //连接
m_pSocket->_OnConnect(nErrorCode);
break;
case FD_CLOSE: //关闭
m_pSocket->_OnClose(nErrorCode);
break;
default:
break;
}
}
}
void CSocketWnd::OnWinsocketNotify(WPARAM wParam, LPARAM lParam)
{
if (wParam == 0 && lParam == 0)
return; int nErrorCode = WSAGETSELECTERROR(lParam);
if(m_bResolved) //需要解析主机名
{
if(nErrorCode==0)
m_bResolved = FALSE;
m_pSocket->_OnResolve(nErrorCode);
}
else //已经获取到了主机名,是其他Socket消息
{
if((SOCKET)wParam!=m_pSocket->m_hSocket)
return; switch (WSAGETSELECTEVENT(lParam))
{
case FD_READ: //读
{
DWORD nBytes;
if (!m_pSocket->IOCtl(FIONREAD, &nBytes))
nErrorCode = WSAGetLastError();
if (nBytes != 0 || nErrorCode != 0)
m_pSocket->_OnReceive(nErrorCode);
}
break;
case FD_WRITE: //写
m_pSocket->_OnSend(nErrorCode);
break;
case FD_OOB:
m_pSocket->_OnOOBData(nErrorCode);
break;
case FD_ACCEPT: //接收
m_pSocket->_OnAccept(nErrorCode);
break;
case FD_CONNECT: //连接
m_pSocket->_OnConnect(nErrorCode);
break;
case FD_CLOSE: //关闭
m_pSocket->_OnClose(nErrorCode);
break;
default:
break;
}
}
}
光看这段程序没有问题。可能是其它部分的问题,因为这一段跟MFC中CAsyncSocket的实现几乎一模一样。
如果可以的话: [email protected]
首先,代理服务器看不到,我想一个程序行,一个不行,与网络环境应该是没有任何问题的。to davidprg():
应该不会,把程序代码该成同步方式,也不会有问题。