C++广播通信实例
本文实例讲述了C++实现广播通信的方法。分享给大家供大家参考。具体实现方法如下:
广播通信代码框架:
1.协议都是:
SOCKETs=::socket(AF_INET,SOCK_DGRAM,0);
2.服务端设置选项
BOOLbBroadcast=TRUE; ::setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char*)&bBroadcast,sizeof(BOOL));
3.服务端向255.255.255.255这个广播地址发内容 客户端收听就可以了
服务端代码:
#include"InitSock.h"
#include<stdio.h>
VOIDmain()
{
CInitSockinitSock;
SOCKETs=::socket(AF_INET,SOCK_DGRAM,0);
//设置广播就是设置这个选项
BOOLbBroadcast=TRUE;
::setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char*)&bBroadcast,sizeof(BOOL));
//设置广播地址
SOCKADDR_INbcast;
bcast.sin_family=AF_INET;
bcast.sin_port=htons(4567);
bcast.sin_addr.S_un.S_addr=INADDR_BROADCAST;//::inet_addr("255.255.255.255");
printf("beginsendthedata:\r\n");
charsz[]="thisisthebroadcastdata";
while(TRUE)
{
::sendto(s,sz,sizeof(sz),0,(sockaddr*)&bcast,sizeof(bcast));
::Sleep(5000);
}
}
客户端代码:
#include"InitSock.h"
#include<stdio.h>
voidmain()
{
CInitSockinitSock;
SOCKETs=::socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_INsin;
sin.sin_family=AF_INET;
sin.sin_port=::htons(4567);
sin.sin_addr.S_un.S_addr=INADDR_ANY;
if(::bind(s,(sockaddr*)&sin,sizeof(sin))==SOCKET_ERROR)
{
printf("binderror");
return;
}
printf("beginrecvthebroadcastdata:\r\n");
charsz[256]={0};
SOCKADDR_INaddrRemote;
intnLen=sizeof(SOCKADDR_IN);//这里必须设置成这个大小
while(TRUE)
{
intnRet=::recvfrom(s,sz,sizeof(sz),0,(sockaddr*)&addrRemote,&nLen);
if(nRet>0)
{
sz[nRet]='\0';
printf(sz);
}
}
}
希望本文所述对大家的C++程序设计有所帮助。