大意如题,希望高手能具体给点代码演示!

解决方案 »

  1.   

    不要把CSOCKET放到线程处理会堵塞的如果要
    用原始SOCKET
      

  2.   

    CSocket要派生子类来用的,看看MSDN有没例子
    而原始套接字就不规定你找些例子看看
    想快速开发CSOCKET
    想了解深入原始套接字
      

  3.   

    你还是到www.vckbase.com下些程序看吧·········郁闷,围观新人
      

  4.   

    #include <winsock2.h>
    #include <stdio.h>
    #include <windows.h>
    #include <iostream.h>
    #pragma comment(lib,"WS2_32")
    DWORD WINAPI ThreadAcceptProc( LPVOID lpParameter);
    void main()
    {
    //====================================主线程===========================================
    int i=1;
    WORD mVersionRequested;
    mVersionRequested=MAKEWORD(2,2);
    WSADATA wsaData;
    SOCKET sListen,sAccept;
    if (WSAStartup(mVersionRequested,&wsaData)!=0)
    {
    printf("WSAStartup Failed, Error: %d\n",WSAGetLastError());
    WSACleanup();
    }
    if (LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2)
    {
    printf("The version is not fit !");
    WSACleanup();
    }
    sListen=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);       //创建监听口
    sockaddr_in addrSer;
    addrSer.sin_addr.s_addr=inet_addr("192.168.66.11");
    addrSer.sin_family=AF_INET;
    addrSer.sin_port=htons(8000);
    if (SOCKET_ERROR==bind(sListen,(sockaddr*)&addrSer,sizeof(addrSer)))  //绑定监听口
    {
    printf("Bind Failed, Error: %d\n",WSAGetLastError());
    closesocket(sListen);
    }
    else
    {
    printf("主机IP:[%s],PORT: [%d]\n",inet_ntoa(addrSer.sin_addr),htons(addrSer.sin_port));
    }
    u_long iMode=0;
    ioctlsocket(sListen, FIONBIO, &iMode);     //非阻塞模式 非0,阻塞模式0
    if (SOCKET_ERROR!=listen(sListen,1))
    {
    printf("正在监听中....\n");
    }
    sockaddr_in addrCli;
    int iLen=sizeof(addrCli);
    HANDLE hAccept;
    while (true)
    {
    sAccept=accept(sListen,(sockaddr*)&addrCli,&iLen);
    if(INVALID_SOCKET==sAccept)
    {
    // printf("接收失败...\n");
    }
    else
    {
    printf("Clien%d的IP为:%s, PORT为:%d\n",i,inet_ntoa(addrCli.sin_addr),\
    ntohs(addrCli.sin_port));
    hAccept=CreateThread(NULL,0,ThreadAcceptProc,NULL,0,NULL);
    i++;
    }
    }
    }
    DWORD WINAPI ThreadAcceptProc( LPVOID lpParameter)
    {
    //recvfrom()
    //==========================于此设置接收与发送================================
    return 0;
    }//=========================================Listen监听线程==================================================
    //=================================================================================================
    // HANDLE hThreadListen;
    // hThreadListen=CreateThread(NULL,0,ThreadListenProc,(LPVOID)sListen,0,NULL);   //监听线程
    // Sleep(1000);
    //    while (1)
    //    {
    //   AcceptData *pAcceptParam=new AcceptData;
    //  pAcceptParam->sList=sListen;
    // 
    // // sockaddr_in ad;
    //  HANDLE hThreadAccept=CreateThread(NULL,0,ThreadAcceptProc,(LPVOID)pAcceptParam,0,NULL);//接收线程// SetThreadPriority(hThreadAccept,THREAD_PRIORITY_HIGHEST);
    // ad=((AcceptData *)pAcceptParam)->addrC;
    // printf("Accepted Client%d IP:[%s],port:[%d]\n",i,inet_ntoa(ad.sin_addr),\
    // ntohs(ad.sin_port));
    // 
    //  i++;
    //  //发送信息
    //  char buf[]="I am server !";
    //  int iSend=send(sAccept,buf,sizeof(buf),0);
    //  if (iSend==SOCKET_ERROR)
    //  {
    //  printf("Send Failed,Error: %d\n",WSAGetLastError());
    //  break;
    //  }
    //  else if (iSend==0)
    //  {
    //  break;
    //  }
    //  else
    //  {
    //  printf("Send total byte is %d\n",iSend);
    //  printf("---------------------\n");
    //  }
    //  closesocket(sAccept);
    /* }*/
    /* }
      closesocket(sListen);
      WSACleanup();
    }
    //  0x0040dd8f
    DWORD WINAPI ThreadListenProc(
      LPVOID lpParameter
    )
    {
    SOCKET sLis=(SOCKET)lpParameter;
    if (SOCKET_ERROR==listen(sLis,1))
    {
    printf("Listen Failed, Error: %d\n",WSAGetLastError());
    closesocket(sLis);
    return 0;
    }
    else
    {
    printf("正在监听中......!");
    }
    return 1;
    }DWORD WINAPI ThreadAcceptProc(
      LPVOID lpParameter
      )
    {
    SOCKET ss=((AcceptData*)lpParameter)->sList;
    sockaddr_in addrCli;
    int iLen=sizeof(addrCli);
      SOCKET sAccept=accept(ss,(sockaddr*)&addrCli,&iLen);
      if (INVALID_SOCKET==sAccept)
      {
    printf("Accept Failed, Error: %d\n",WSAGetLastError());
    closesocket(sAccept);
    //break;
    }
    else
    {
    printf("接受成功....");
    }
    //输出客户IP地址和端口号
    printf("Accepted Client%d IP:[%s],port:[%d]\n",i,inet_ntoa(addrCli.sin_addr),\
    ntohs(addrCli.sin_port));
    i++;
    return 1;
    }
    */
      

  5.   

    谢谢这位大哥,要是用CSocket类实现的就好了!
      

  6.   

    CSocket那玩意给新手玩玩还可以,封装的实在太简陋。
      

  7.   

    那用MFC实现多线程的Socket连接,该使用什么方法呢?