我要做一个程序向网络发送udp广播,该怎么做?最好有例子。

解决方案 »

  1.   

    发送UDP包,目标主机的IP地址为255.255.255.255
      

  2.   

    回复人: masterz(www.fruitfruit.com) ( ) 信誉:273 
    //multicast using CAsyncSocket/////////////////////// fd_set fds;
    FD_ZERO(&fds);
    FD_SET(m_Socket, &fds);
    struct timeval timeout;
    timeout.tv_sec = m_Timeout;
    timeout.tv_usec = 0;
    switch (select(0, NULL, &fds, NULL, &timeout))
    {
    case SOCKET_ERROR:
    return GetLastErrorCode();
    case 0:
    return ERROR_SOCKET_TIMEOUT;
    } SOCKADDR_IN addr;
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(255.255.255.255);
    addr.sin_port = htons(9999);
    int send_len = sendto(m_Socket, (char *)buffer, len, 0, (struct sockaddr *)&addr, sizeof(SOCKADDR));
    if (send_len == SOCKET_ERROR || send_len == 0) return GetLastErrorCode(); //////主  题:  在局域网中, 使用 SOCKET编程,如何广播消息??? ///////////////////////////////////////////////////
    //发送端程序   
    #include    <stdio.h  >  
    #include    <winsock.h  >   
    int  main(int  argc,  char*  argv[])  {  
           WSADATA  wsaData;                    //指向WinSocket信息结构的指针  
           SOCKET  sockListener;  
           SOCKADDR_IN  sin,saUdpServ;  
           BOOL  fBroadcast  =  TRUE;  
           char  sendBuff[1024];  
           int  nSize;  
           int  ncount=0;  
           if(WSAStartup(MAKEWORD(  1,  1  ),  &wsaData  )!=0)//进行WinSocket的初始化  
           {  
                   printf(  "Can't  initiates  windows  socket!Program  stop.\n  ");//初始化失败返回-1  
                   return  -1;  
           }  
           sockListener=socket(PF_INET,SOCK_DGRAM,0);  
           setsockopt  (  sockListener,SOL_SOCKET,SO_BROADCAST,  
                   (CHAR  *)&fBroadcast,sizeof  (  BOOL  ));  
     
           sin.sin_family  =  AF_INET;  
           sin.sin_port  =  htons(0);  
           sin.sin_addr.s_addr  =  htonl(INADDR_ANY);  
           if(bind(  sockListener,  (SOCKADDR  *)&sin,  sizeof(sin))!=0)  
           {  
                   printf(  "Can't  bind  socket  to  local  port!Program  stop.\n  ");//初始化失败返回-1  
                   return  -1;  
           }  
           saUdpServ.sin_family  =  AF_INET;  
           saUdpServ.sin_addr.s_addr  =  htonl  (  INADDR_BROADCAST  );  
           saUdpServ.sin_port  =  htons  (7001);//发送用的端口,可以根据需要更改  
           nSize  =  sizeof  (  SOCKADDR_IN  );  
           while(1)  
           {  
                   sprintf(sendBuff,  "Message  %d  ",ncount++);  
                   sendto  (  sockListener,sendBuff,  
                           lstrlen  (sendBuff),  
                           0,  
                           (SOCKADDR  *)  &saUdpServ,  
                           sizeof  (  SOCKADDR_IN  ));  
                   printf(  "%s\n  ",sendBuff);  
           }  
    return  0;  
    }  
    /////////////////////  //接收   
    #include    <stdio.h  >  
    #include    <winsock.h  >  
    #include    <conio.h  >   
    int  main(int  argc,  char*  argv[])  
    {  
           WSADATA  wsaData;                    //指向WinSocket信息结构的指针  
           SOCKET  sockListener;  
           SOCKADDR_IN  sin,saClient;  
           char  cRecvBuff[1024];  
           int  nSize,nbSize;  
           int  iAddrLen=sizeof(saClient);  
           if(WSAStartup(MAKEWORD(  1,  1  ),  &wsaData  )!=0)//进行WinSocket的初始化  
           {  
                   printf(  "Can't  initiates  windows  socket!Program  stop.\n  ");//初始化失败返回-1  
                   return  -1;  
           }  
           sockListener=socket(AF_INET,  SOCK_DGRAM,0);  
           sin.sin_family  =  AF_INET;  
           sin.sin_port  =  htons(7001);//发送端使用的发送端口,可以根据需要更改  
           sin.sin_addr.s_addr  =  htonl(INADDR_ANY);  
           if(bind(  sockListener,  (SOCKADDR  FAR  *)&sin,  sizeof(sin))!=0)  
           {  
                   printf(  "Can't  bind  socket  to  local  port!Program  stop.\n  ");//初始化失败返回-1  
                   return  -1;  
           }  
           while(1)  
           {  
                   nSize  =  sizeof  (  SOCKADDR_IN  );  
                   if((nbSize=recvfrom  (sockListener,cRecvBuff,1024,0,  
                           (SOCKADDR  FAR  *)  &saClient,&nSize))==SOCKET_ERROR)  
                   {  
                           printf(  "Recive  Error  ");  
                           break;  
                   }  
                   cRecvBuff[nbSize]  =  '\0';  
                   printf(  "%s\n  ",cRecvBuff);  
           }  
           return  0;  
    }
      

  3.   

    http://www.ccw.com.cn/htm/center/net/02_7_16_6.asp