我继承了一个类
class CStationSocket : public CAsyncSocket首先Creat();
int rc=0;
再rc=Connect("127.0.0.1",5477);在5477这个端口有服务器侦听和没有侦听时,Connect返回值都为0?为什么呢,我要如何判断一个Socket成功与服务器建立了连接呢?

解决方案 »

  1.   

    用返回值。
    if(ret == SOCKET_ERROR)
        print("Connect Error with Error Code %d\n", WSAGetLastError);
    else printf("Connect Successed!"); 用“Error Lookup"查错误代码。
      

  2.   

    "127.0.0.1" 是本地机地址。connect 返回0表示已经连接成功了。
    想要验证可以发数据过去,对方收到与否则可证明连接是否真的成功。想要得到错误信息可以这样:
    if (nRet == SOCKET_ERROR)
    {
    LPVOID lpMsgBuf;
    FormatMessage( 
    FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_SYSTEM | 
    FORMAT_MESSAGE_IGNORE_INSERTS,
    NULL,
    WSAGetLastError(),
    0, // Default language
    (LPTSTR) &lpMsgBuf,
    0,
    NULL 
    ); MessageBox((LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
    LocalFree( lpMsgBuf );
    return 0 ;
    }
      

  3.   

    对于WSAAsyncSelect模型和WSAEventSelect模型,可以在客户端等待FD_Connect消息/事件的出现。
      

  4.   

    CAsyncSocket是异步,用基于CSocket,返回1就代表成功。
      

  5.   

    没错,返回1代表成功。
    返回0表示失败。
    取得失败信息用WSAGetLastError()。
      

  6.   

    DWORD dwResult = GetLastError();
    switch(dwResult)
    {
    case WSAETIMEDOUT:
    strcpy(szError,"连接超时!");
    case WSAECONNREFUSED:
    strcpy(szError,"连接被拒绝!");

    case WSAEHOSTUNREACH:
    strcpy(szError,"主机无法到达!");

    case WSAEISCONN:
    strcpy(szError,"已经和主机建立了连接!");
    default:
    strcpy(szError,"连接时发生其它错误!");
    }
      

  7.   

    MSDN:
    If no error occurs, connect returns zero. Otherwise, it returns SOCKET_ERROR, and a specific error code can be retrieved by calling WSAGetLastError.如果没有错误发生,connect返回0.否则返回SOCKET_ERROR.
      

  8.   

    CAsyncSocket是异步通讯的,当你发出连接请求,连接成功的话,就会产生FD_Connect消息,添加消息处理函数OnConnect()就可以了.
      

  9.   

    因为你用的是基于CAsyncSocket,应该用CSocket,否则他先返回一个直,不管你连上没有?用同步的CSocket,则等待到链接成功与否才返回相应的值!
      

  10.   

    现在的问题是这样,我这儿的客户端Socket每10秒连接上次服务器,如果连接上,服务器会发送数据过来,则不连接了,否则就会一直连接下去,当客户端Socket第一次连接服务器时,能收到服务器发来的数据,即能激活OnReceive事件,可当Socket第一次连接不上之后,如果第二次连接服务器,则收不到服务器发送的数据,Why? 其实从服务器上看来客户端已建立了连接,并且发送的数据,可是客户端为什么收不到呢?
      

  11.   

    客户端是不是绑定固定的端口,如果是这样请看:
    http://expert.csdn.net/Expert/topic/1131/1131123.xml?temp=.6317255
      

  12.   

    To:yanhuahui(小辉) 
     没有绑定固定Port,Create();
      

  13.   

    服务器的监听和accpet代码帖出来,你主题内容的代码是客户机?
      

  14.   

    回复人: zxiaox(呆呆2002) ( ) 信誉:100  2002-10-30 14:18:57  得分:0 
     
     
      
    CAsyncSocket是异步通讯的,当你发出连接请求,连接成功的话,就会产生FD_Connect消息,添加消息处理函数OnConnect()就可以了.