消息影射: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;
}
}
}

解决方案 »

  1.   

    几乎是抄的MFC的代码!help me!
      

  2.   


    光看这段程序没有问题。可能是其它部分的问题,因为这一段跟MFC中CAsyncSocket的实现几乎一模一样。
    如果可以的话: [email protected]
      

  3.   

    只是在防火墙里才刚接到FD_CONNECT消息后,马上就就收到FD_CLOSE消息,异步模式则没有,而MFC的CAsyncSocket也没有,而MFC的CAsyncSocket涉及到当前线程等,我没有处理,跟踪了好久也没找出原因!
      

  4.   

    环境:我自己写得异步Socket class,在一居域网里(有Proxy Server,但无须任何设置)可以连接到Internet.问题:刚刚连接成功后,马上就接收到了FD_CLOSE消息。而用MFC的CAsyncSocket就不会收到FD_CLOSE消息,为什么?清楚了吗?help me! 我还是要推! 
      

  5.   

    to zb_china():
    首先,代理服务器看不到,我想一个程序行,一个不行,与网络环境应该是没有任何问题的。to davidprg():
    应该不会,把程序代码该成同步方式,也不会有问题。
      

  6.   

    这样好了,你从CAsyncSocket派生出一个类来,然后用这个类来处理你的问题,先解决你的问题,然后再检查一下FD——CLOSE消息是那里发出的,如果是由代理服务器发出的话,可能你要把这个消息给屏蔽一下,你的客户端接收到了这些消息,但服务端有没有发出泥。
      

  7.   

    我自己写的原因,就是不想用CAsyncSocket!
      

  8.   

    用zzh的方法check一下你的代码吧我想不是代理的问题,代理不会中断连接前就发送这种消息。