UDP广播和接受

//主  题:     在局域网中,   使用   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;     
}     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值