最好是从CAsyncSocket派生你自己的Socket类,这样就可以用重载OnAccept、OnConnect、OnReceive、OnClose之类虚函数来得到消息了。
最好将AfxSocketInit放到InitInstance里去,调用一次即可。
还有,在服务器端,Create后就已经给你绑定到端口号了,所以就不必再用Bind了。
还有,在Create中没有必要改变lEvent的值,默认就行。
还有,Bind后边不要加IP地址。最好不用Bind函数。用Create一次完成。
在Connect的时候,如果超时(或其它原因)就会出现上面的情况,(//error……)如果你用了从CAsyncSocket派生的方法,就会得到OnConnect消息,可以在里边利用它的参数nErrorCode(具体值请参阅MSDN)来判断连接是否成功不成功的话,可以在此再次调用Connect。

解决方案 »

  1.   

    如果是返回值为10035的话,代表该SOCKET不能立即返回,你应该在OnConnect中响应是否连接成功的消息。这不是连接不成功的问题。
      

  2.   

    谁有现成的CAsyncSocket的连接的demo?
      

  3.   

    10035的错误号并不代表错误。
    你应该派生CAsyncSocket类,或者CSocket类。从而你可以从基类中获得OnConnect,Onreceive,OnClose等许多事件,通过这些事件你才可能知道你的连接与数据传送是否正确。
      一般Client端应该处理的事件是onconnect,onclose,onreceive(如果接收数据)。
      Server端应处理onreceive,onclose,onreceive等。
      注意,两端都要派生新类。从文档类中生成派生类的对象。
      若要详细资料,请联系[email protected]
      

  4.   

    Elephant: 能不能给我一份,hbd  email: [email protected]
      

  5.   

    我都回答好几遍了!!!!!!
    记住了:CAsyncSocket是非阻塞的,也就是它经常会返回值。当连接时,它返回错误,并不是真的有错。你可以GetLastError()然后判断是否为WSAEWOULDBLOCK,如果是这样,你可以忽略它,事实上已经建立了连接。另外,你用CSOCKET类就不会出现这种情况。因为他是阻塞的。
      

  6.   

    我都说过无数遍了,CAsyncSocket是非阻塞的,它会遇到异常时返回值,但不一定是错误。
    如果GETLASTERROR()是WSAEWOULDBLOCK的话,就代表连接已经成功,但服务器尚未响应。
    你可以忽略这种情况;所以,你的程序应为:
    if (SOCKET_ERROR==m_sockRecv.Connect("127.0.0.1",6802))
    {
    if (GetLastError()!=WSAEWOULDBLOCK)
    {
    AfxMessageBox("ERRR IN Connect!");
    RETURN;
    }
     
      

  7.   

    我的运行结果是GetLastError()!=WSAEWOULDBLOCK,好事做到底,送给我一个DEMO hbd 
      

  8.   

    void CClientDlg::OnButtonlink() 
    {
    // TODO: Add your control notification handler code here if (m_IpAddr.IsBlank())
    {
    AfxMessageBox("You must input host IP!");
    return;
    };
        m_IpAddr.GetWindowText(m_ServerAddr,18); BOOL m_bFlag=ClientSock.Create(0,SOCK_STREAM,FD_CONNECT); if (! m_bFlag)
    {
    MessageBox("Socket create failed!","Error!",MB_OK|MB_ICONERROR);
    PostQuitMessage(0);
    return;
    }

    m_bFlag=ClientSock.Connect(m_ServerAddr,2000);
    if(!m_bFlag)
    {
    int nError=ClientSock.GetLastError ();
    if(nError!=WSAEWOULDBLOCK)
    {

    MessageBox("Connect to host failed!","Error!",MB_OK|MB_ICONERROR);
    ClientSock.Close();
    //PostQuitMessage(0);
    return;
    }
    else
    ClientSock.Connected=TRUE;
    ClientSock.AsyncSelect(FD_WRITE); }

    return;

    }