UDP boost::asio的实现

本文介绍了一种在局域网内使用SOCKET编程进行广播消息的方法,包括发送端和接收端的代码实现,适用于Windows平台。通过设置广播选项并绑定特定端口,发送端可以向局域网内的所有主机广播消息,而接收端能够监听并接收这些广播消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//////主  题:     在局域网中,   使用   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、付费专栏及课程。

余额充值