switch(WSAGETSELECTEVENT(lParam))
         {
            case FD_ACCEPT:               if ((Accept = accept(wParam, NULL, NULL)) == INVALID_SOCKET)
               {
                  printf("accept() failed with error %d\n", WSAGetLastError());
                  break;
               }               // Create a socket information structure to associate with the
               // socket for processing I/O.               CreateSocketInformation(Accept);               printf("Socket number %d connected\n", Accept);               WSAAsyncSelect(Accept, hwnd, WM_SOCKET, FD_READ|FD_WRITE|FD_CLOSE);               break;

解决方案 »

  1.   

    那是处理新建的链接的
    FD_ACCEPT是属于服务端套接字,而Accept(这个变量名真差)是accept接受的一个和客户端链接的套接字,两者不是一个套接字
      

  2.   

    服务器端已经接收客户端的连接,从而建立服务器端的套接字Accept,那为什么还要WSAAsyncSelect()?
      

  3.   

    不在 FD_ACCEPT 中调用 WSAAsyncSelect 建立 客户端套接字,你咋收发数据啊?从哪里收发数据啊?
      

  4.   

    应该说WSAAsyncSelect 是在服务器端将套接字Accept建立为什么模式吧?
      

  5.   

    如果说服务器端的socket模式为WSAAsyncSelect 那么客户端的socket模式一定要是WSAAsyncSelect模式吗???
      

  6.   

    WSAAsyncSelect 是 IO 模型,跟套接字类型有啥关系?
      

  7.   

    对不起,我说错了!
    我的意思是服务器端IO 模型是WSAAsyncSelect ,那么客户端的IO 模型也一定为WSAAsyncSelect吗?
      

  8.   

    我的理解是这样:
    第一次调用 WSAAsyncSelect,通过异步选择这种方式将窗口与服务器套接字绑定,这样当有客户端连上来,窗口才可以收到“有客户连上来了”的消息,于是就第二次调用 WSAAsyncSelect,通过异步选择这种方式将窗口与客户端套接字绑定,这样当客户端有数据过来,窗口才能收到“有数据到达”的消息。相当于第一次调用 WSAAsyncSelect 是在服务器端建立一个登记表,用来为每个连接上来的客户端做登记,第二次调用 WSAAsyncSelect 则是在服务器与特定的客户端之间建立一个通道。所有的 SOCKET 通信过程都是这样,但是采用不同的方式来建立登记表、建立通道以及收发数据,这样就形成了不同的 IO 模型。我也是初学者。不对的地方请大家纠正。
      

  9.   

    客户端和服务端IO模型大多数情况下不同,要具体问题具体分析。根据规模不同选择不同的模型。WSAAsyncSelect这个模型只适合小型服务端,和大多数客户端。单线程只支持64个事件对象等待,是其硬伤。但是和面向消息的开发思路,比较吻合
      

  10.   

    接触WSAAsyncSelect时间不长,有些地方不太明白,所有请教大家。
      

  11.   

    我现在就用WSAAsyncSelect来做了一个程序,但是发现一个问题?很是头疼.
      

  12.   

    我的理解:如果服务器一直运行的话,刚开始就启动,然后一直等待客户端连接,这个时候可以用WSAAsyncSelect注册FD_ACCEPT和FD_CLOSE事件,其它的不用注册,因为读和写事件都是服务器和客户端建立一个连接时才能用的事件,而它们使用的套接字也与服务器套接字不一样,记住在关闭时,也要关闭服务器和客户端连接的那个套接字,所以也要有一个FD_CLOSE事件,而这个事件和第一次的FD_CLOSE是不同的,这个是关闭客户端连接的,上一个是关闭服务器的套接字的