偶用CAsyncSocket进行编程,如果Server先运行,开始Listen,那么Client再开始Connect就可以正常连接,但是如果先开Client,让他Connect,然后再打开Server去Listen,那么Client就连接不上,这时怎么回事?怎么解决呢?
偶初学Socket编程,希望大家多多指教!

解决方案 »

  1.   

    当然不行啦,你先Connect,但这时Server还没有Listen,当然失败了,一失败就退出去了。
    这时候再Listen,有什么用呢?你可以在Connect前先Sleep一下,或者来个循环Connect呀,直到成功为止
      

  2.   

    服务器要先listen, 客户端才能connect
    先connect,再listen当然不行
      

  3.   

    你可以循环Connect,直到成功为止。Connect时,Client要发出一个寻找Server对应接口的报文,如果Server没Listen,就会失败退出,要重新Connect,你就得手动实现。
      

  4.   

    客户的connect是寻找服务器的地址和断口号,如果服务器的断口是监听状态的话,就可以建立连接了,如果不再监听状态连接就失败了。这时客户的connect事件已经执行完毕。而服务器的Listen事件是一致执行的,就像一个死循环,直到winsocket释放。
    如果你想实现你要的情况, bsk(bsk) 的方法可以实现,但是应该用进程实现。
      

  5.   

    做一个循环!一直尝试connect,直到成功退出!或设定connect次数!都可以!!
      

  6.   

    我用while(nCode==0)
            nCode=m_sConnectSocket.Connect(name,port);
    虽然可以连上,但是然后客户端就像是死掉了一样,没什么反映了,怎么回事?
      

  7.   

    while ( nCode==0 ){
    nCode=m_sConnectSocket.Connect(name,port);
    Sleep(100);
    }
      

  8.   

    你首先要理解清楚LISTEN函数的作用:是让套接字进入等候连接的状态。
    如果SERVER还没进入这个状态,你CLIENT发过来的东西SERVER当然不‘理’你啦
      

  9.   

    while ( nCode==0 ){
    nCode=m_sConnectSocket.Connect(name,port);
    Sleep(100);
    }
      

  10.   

    Server 如果不Listen该端口,你的Client的Connect是不会响应的
      

  11.   

    bsk:
    你的代码我试过了,不过现在好像是Server和Client都没反映了,怎么回事!
      

  12.   

    我又调试了一下,我发现在Client在Connect的循环中如果这时Server还没有开始Listen,那么第一次调用Connect时,用GetLastError()返回的错误是无法连接,然后再循环调用就返回的是参数错误,如果这时候Server开始Listen,那么再循环一次用GetLastError()返回的错误就是试图连接已连接的Socket,但是nCode=m_sConnectSocket.Connect(name,port);得到的nCode值一直都是0,为什么调用成功的时候返回的也不是非0呢?我查MSDN,上面写的是如果调用Connect成功返回的就是非0值,不解!!!
    我最后利用GetLastError()来控制循环,虽然程序可以正常运行了,但是用以前的方法怎么不行呢?
    就要结帖了,希望大家给个好的答案。!