WSAAsyncSelect
就是用这个函数实现最好程序中有些注释
最好是用VC写的基于对话框的,这样看起来比较容易

解决方案 »

  1.   

    要是我就先包装自己的Socket类, 
    那样会方便了, 可以仿制CAsyncSocket类.
      

  2.   

    做CAsyncSocket的继承也是很简单的 CAsyncSocket
      

  3.   

    先给个服务器端的东东WSADATA         wsd;
    SOCKET          SockServer;
    sockaddr_in     sin, sout;
    int             len;
    char            chBuf[512] = {0};WSAStartup(MAKEWORD(2,2), &wsd);SockServer = socket(AF_INET, SOCK_STREAM, 0);
    if (SockServer == INVALID_SOCKET)
    {
        return;
    }memset(&sin, '\0', sizeof(sin));
    sin.sin_family = AF_INET;
    sin.sin_port = htons(9999);
    sin.sin_addr.S_un.S_addr = INADDR_ANY;if (bind(SockServer, (const sockaddr *)&sin, sizeof(sin)) == SOCKET_ERROR)
    {
        return ;
    }
    if (listen(SockServer, 10) == SOCKET_ERROR)
    {
        return ;
    }len = sizeof(sout);
    SockClient = accept(SockServer, (sockaddr *)&sout, &len);
    if (SockClient == INVALID_SOCKET)
    {
        return 0;
    }recv(SockClient, chBuf, sizeof(chBuf), 0);WSACleanup();
      

  4.   

    请大家看清楚
       用API写的     异步非阻塞阻塞的不需要
    谢谢大家合作
      

  5.   

    在 asdfghjkl1107(脚右金黄) 的代码中加上
    setsocketopt()
    或者
    select()函数就可以非阻塞
      

  6.   

    建议直接看MFC中CSocket的实现代码
      

  7.   

    难道大家都是用MFC类中的类来做socket程序吗?
    难道就真没人知道吗??
    难道你们只是喜欢求结果并不想知道里面的实现方法吗???
      

  8.   

    使用WSAAsyncSelect不如直接使用mfc,因为它要创建窗口,何况mfc也是用的这个函数,封装的也不错,何必自讨苦吃去重新写一个。如果你真想用异步的,不妨使用WSAEventSelect,或者完成端口也成,感觉要比WSAAsyncSelect好用一些
      

  9.   

    创建socket就不写了int nOption
    ioctlsocket(socket, FIONBIO, &n);
      

  10.   

    呵呵,不好意思,错了.
    #define WM_ASYNCMSG WM_USER + 0x0044HWND hWndRelavtive;int nOption = 1;
    int nRet = ioctlsocket(socket, FIONBIO, &nOption);nRet = WSAAsyncSelect(socket, hWndRelative, WM_ASYNCMSG, FD_READ | FD_WRITE | FD_OOB | FD_ACCEPT | FD_CONNECT | FD_CLOSE);
    对应的相关窗口中有
    LRESULT OnAsyncMsg(WPARAM wParam, LPARAM lParam)
    {
    if(WSAGETSELECTERROR(lParam))
    {
    // Error handler
    return 0L;
    }switch(WSAGETSELECTEVENT(lParam))
    {
    case FD_READ:
    return OnRead();
    case FD_WRITE:
    return OnWrite();
    case FD_CONNECT:
    return OnConnect();
    case FD_ACCEPT:
    return OnAccept();
    case FD_CLOSE:
    return OnClose();
    case FD_OOB:
    return OnOOB();
    break;
    default:
    ASSERT(FALSE);
    break;
    }return 0L;
    }
      

  11.   

    完成端口你懂么?如果不懂就请联系本人
    [email protected]
    本人有你需要的东东
      

  12.   

    http://61.153.195.10:8080/view.asp?file=315下面的一个Chapter16\Chat-TCP是个好列子。
      

  13.   

    to   fbmsf(FBM)
    你的列子我看了,但都是汇编啊,但还是要谢谢你
      

  14.   

    少听别人放屁,
    谁说要多线程,只有阻塞模式才用到多线程!
    异步先用if(iocltsocket(s,FIONBIO,&cmd)==socket_error)
            {
                closesocket(S);
                ……
            }
      将其设置为非阻塞模型,然后用select函数     
       再用 swith(select(s,......))
            {
             case 0: //time out
             case -1: //socket error
             default:
                     
            }
     就OK了,但要注意定义timeval结构,具体看一下selete函数的介绍吧
      

  15.   

    楼上的哥哥,你说话太武断了吧?你做完成端口不开线程做给我看看。(期待ing)还有说话注意文明礼貌。用select,你不觉得对于服务器是一种非常浪费资源的做法么?尤其是在windows下的编程