给出源码最好!!!

解决方案 »

  1.   

    http://www.ccidnet.com/tech/network/2000/07/28/58_1017.html
      

  2.   

    有SOCKET、PIPE、RPC和NETBIOS方法的源程序吗?给出的人,我给他加分
      

  3.   

    在serverview.cpp 中 重 载CServerView() 构 造 器, 创 建 并 绑 定 嵌 套 字: 
          CServerView::CServerView()
    {     // TODO: add construction code here
          Isconnect=FALSE;
          flag=FALSE;
          sizeTotal.cy=350;
          sizeTotal.cx=300;
          m_hListenThread;
          count=5;
          int status;
          WSADATA wsaData;
       m_data[0]=“initializing Windows Sockets DLL....";
          if((status=WSAStartup(0x0101, &wsaData))==0)
          {     m_data[0] +=“Succeeded";
                m_bInitialized=TRUE;
          }
          else
          {     m_bInitialized=FALSE;
          }
          m_sock=socket(AF_INET,SOCK_DGRAM,0);
          m_data[1]=“Creating socket....";
          if(m_sock==INVALID_SOCKET)
          {     m_data[1] +=“Failed";
          }
          m_data[1] +=“Succeeded";
          m_data[2]=“Binding socket....";
          sockaddr_in sa;
          sa.sin_family=AF_INET;
          sa.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
          sa.sin_port=htons(5050);
          if(bind(m_sock,(PSOCKADDR) 
         &sa,sizeof(sa))==SOCKET_ERROR)
          {     m_data[2] +=“Failed";
                closesocket(m_sock);
          }
          m_data[2] +=“Succeeded";
          m_data[3]=“Creating listener thread....";
          unsigned long idThread;
     m_hListenThread=CreateThread(NULL,0,
    (LPTHREAD_START_ROUTINE)Listen,
    (void        if(m_hListenThread)
          {     m_data[3] +=“Succeeded";
                m_data[4] +=“Listening....";
          }
          else
                m_data[4] +=“Failed";

    定 义 接 收 和 处 理 消 息 的 线 程: 
          long WINAPI Listen(CServerView *pView)
    {     char msg[2000]=“";
          int   nchar;
          SOCKADDR_IN saClnt;
          int saClntLen;
          while(1)
          { saClntLen=sizeof(saClnt);
            nchar=recvfrom(pView ->m_sock,msg,1024,0, 
    (PSOCKADDR) &saClnt, &saClntLen);
            if(nchar<0)
            {     pView ->m_data[pView ->count + +] +
                 =“Error in recvfrom\n";
            pView ->InvalidateRect(NULL);
            }
            else
            {switch(msg[0])
            {
            case  ‘A':
            wsprintf(msg,“A:Client from %s attached\n",
                   inet_ntoa(saClnt.sin_addr));
            pView ->m_data[pView ->count + +]=msg;
            pView ->flag=TRUE;
            pView ->InvalidateRect(NULL);
            pView ->Isconnect=TRUE;
            pView ->saClnt=saClnt;
            pView ->saClntLen=saClntLen;
            sendto(pView ->m_sock,msg,1024,0,(PSOCKADDR) 
            &saClnt,saClntLen);
            break;
                      
            case ‘D':
            wsprintf(msg,“D: Client form %s detached\n",
                    inet_ntoa(saClnt.sin_addr));
            pView ->m_data[pView ->count + +]=msg;
            pView ->flag=TRUE;
            pView ->InvalidateRect(NULL);
            pView ->Isconnect=FALSE;
           sendto(pView ->m_sock,msg,1024,0,(PSOCKADDR) 
           &saClnt,saClntLen);
            break;        case ‘R':
            saClntLen=sizeof(saClnt);
            pView ->m_data[pView ->count + +]=msg;
            pView ->flag=TRUE;
            pView ->InvalidateRect(NULL);
            break;        default:
            break;
            }
            }
                
          }
          return(0);
    }
    添 加 接 收 与 发 送 消 息 的 线 程: 
          long WINAPI Listen(CClientView *pView)
    {     char msg[2000];
          pView ->m_data[5]=“Sending ATTACH command";
          pView ->InvalidateRect(NULL);
          wsprintf(msg,“A: ");
         sendto(pView ->m_sock,msg,1024,0,(PSOCKADDR)
         &pView ->m_saSrvr,sizeof(pView ->m_saSrvr));
          int saSrvrLen ,nchar;
          while(1)
          {saSrvrLen=sizeof(pView ->m_saSrvr);
          nchar=recvfrom(pView ->m_sock,msg,1024,0,
       (PSOCKADDR) &pView ->m_saSrvr, &saSrvrLen);
          if(nchar<0)
         {    pView ->m_data[pView ->count + +]=
                 “Error in recvform";
          pView ->InvalidateRect(NULL);}
          else
         { pView ->m_data[pView ->count + +]=msg;
                      pView ->Isconnect=TRUE;
                      pView ->flag=TRUE;
                      pView ->InvalidateRect(NULL);
                }
          }
          return(0);
    }