UDP广播和接受

本文介绍了如何使用SOCKET编程在局域网中实现广播消息的功能,包括发送端和接收端的程序实现。通过初始化WinSocket、绑定本地端口、设置广播标志等步骤,发送端可以将消息广播到局域网内的所有设备。接收端则通过监听特定端口接收广播消息。此方法适用于需要在局域网内进行实时通讯的应用场景。
//////主  题:     在局域网中,   使用   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、付费专栏及课程。

余额充值