有这几点问题:
1.我编了个服务器端口8090和客户端,我调用connect连接环回地址127.0.0.1:8091
可是一直返回10035--WSAEWOULDBLOCK错误,为什么???
2.我用WSAAsyncSelect模型,connect调用时产生FD_CONNECT,如果不在FD_CONNECT中重写connect,
程序好象就不在调用connect了,不是说connect成功才产生FD_CONNECT的吗???
请高手指教,谢谢!!!

解决方案 »

  1.   

    照理不会出问题,我猜你没有创建另外的线程去连接,而且用的是阻塞模式,同一个线程同一时间只能做一件事,程序阻塞在connect函数,FD_CONNECT消息不能激活
      

  2.   

    WSAAsyncSelect函数在connect之前还是connect之后调用?
      

  3.   

    具体是WSAAsyncSelect函数在bind前调用了一次,
    在connect之后又调用了一次.
      

  4.   

    要是在connect之前绑定FD_CONNECT的话,你在CONNECT是有这个问题,这个可以做成重连的,
    给你一个做法,我一般是第一次连接的时候,没有判断就直接CONNECT();是在事件响应里
    int iErrorCode = WSAGETSELECTERROR(lParam);
    是在事件响应里case FD_CONNECT:
    {
      if( 0 == iErrorCode )
            TRACE("连接成功");
      else
           connect ();//重新连接
    }

      

  5.   

    你可以,只WSAAsyncSelect一次,要是在CONNECT之后就不会有这种事情,
      

  6.   

    要是在CONNECT之前WSAAsyncSelect的话,你connect的时候,可以不用判断能否连接上,然后就是在FD_CONNECT之后加入int iErrorCode = WSAGETSELECTERROR(lParam);
    是在事件响应里case FD_CONNECT:
    {
      if( 0 == iErrorCode )
            TRACE("连接成功");
      else
           connect ();//重新连接
    }我一般是用这个做重连的
      

  7.   

    恩,你是用WSAAsyncSelect在CONNECT之前吧
    然后才判断CONNECT的连接是否成功是吗
      

  8.   

    WSAEINVAL                           (10022)             Invalid argument. 提供了非法参数(例如,在使用setsockopt()函数时指定了非法的level)。在一些实例中,它也可能与套接字的当前状态相关,例如,在套接字没有使用listen()使其处于监听时调用accept()函数。 10022我倒是不知道,你没有开服务器,在我想当中应该是对方主机没有反应返回的错误
      

  9.   

    是的,我把WSAAsyncSelect写在CONNECT之前
    就是WM_INITDIALOG里socket调用之后:
    WSAAsyncSelect (clientSock, hwnd, WM_SOCKET, FD_CONNECT|FD_READ|FD_WRITE|FD_CLOSE);
    这样对吗?
      

  10.   

    你要是在WSAAsyncSelect之后connect在补捉这个的确是FD_CONNECT,我记得,绑定FD_CONNECT之后,connect就进入了阻塞状态,在CONNECT是返回10035,也许我的解释是错的.
    但是10022,我没有试过,
      

  11.   

    对的,10022在MSDN里:In some instances, it also refers to the current state of the socket - for instance, calling accept on a socket that is not listening.
      

  12.   

    应该没有问题,服务器晚开或者没有开,我都试过,只要后来服务器开了,客户端就立刻连接上了不过,我好像没有去抓是那个错误.
    10035我是知道,要是WSAAsyncSelect在connect之前的话是会有10035
      

  13.   

    呵呵,对了
    在accept后返回一个SOCKET
    在closesocket监听的SOCKET之前,也要closesocket这个SOCKET的吧.
    对吗
      

  14.   

    怎么又跟ACCEPT混在一起了啊,
    我试了一下,要是服务器没有开的话,都是10035这个错误
      

  15.   

    嘻嘻,我越看越糊涂了,ACCEPT跟CONNECT 有什么关系
      

  16.   

    恩,WWW.VCKBASE.COM 我记的有例子,你可以去找一个看看
      

  17.   

    你有没有在vckbase上面看见这个 SOCKET API通讯程序源代码.zip,
    要是没有这个例子,你把qq留下,我发给你
      

  18.   

    1.我编了个服务器端口8090和客户端,我调用connect连接环回地址127.0.0.1:8091
    是不是写错了?
    连接环回地址127.0.0.1:8090?