CSocket s;
.....
if(!s.Connect(ip,iPort))
{
iReturnValue = 3;
s.Close();
return false;
}
isOpen = true;我的局域网是192.168.1. 的,ip设置的是个连不上的IP地址 10.0.0.101
但s.Connect居然通过了,直接运行下面的isOpen = true了。怎么会这样?

解决方案 »

  1.   

    如果为异步操作,connect会直接返回一个非零值(WSAEWOULDBLOCK),必须通过判断OnConnect()才能确定是否连接正常,所以说能运行到“isOpen=true”,但此时并未真的连接上了
      

  2.   


    没弄明白,onconnect 怎么用的?
      

  3.   

    BOOL CSocket::Connect( ... )
      {
           if( !CAsyncSocket::Connect( ... ) )
           {
                   if( WSAGetLastError() == WSAEWOULDBLOCK ) //由于异步操作需要时间,不能立即完成,所以Socket返回这个错误
                   {
                         //进入消息循环,以从线程消息队列里查看FD_CONNECT消息,直到收到FD_CONNECT消息,认为连接成功。
                         while( PumpMessages( FD_CONNECT ) );
                    }
           }}
    virtual void OnConnect( int nErrorCode );
    因为是虚函数,你需要重载OnConnect方法,nErrorCode 套接字上最近的错误代码,这里可以判断是否连接成功了
      

  4.   


    按ONCONNECT怎么实现呢?CSocket是用Create创建的。CSocket s;
    s.Create();
    s.Connect();
      

  5.   

    如果CSocket s;是UDP方式的话。
    Connect()函数并没有干什么实事,只是bind一下,也就是以后通讯的“对手知道了”。所以几乎永远成功。不知道你的s是不是UDP方式的话。