发送端
#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <strings.h>
#include <stdlib.h>
int main(void)
{
int sockfd;
struct sockaddr_in baddr;
int addr_len=sizeof(baddr);
char buf[100];
bzero(&baddr,sizeof(baddr));
/***AF_INT*网络SOCKET**************/
baddr.sin_family=AF_INET;
/***********通讯端口9000************/
baddr.sin_port=htons(9000);
/***192.168.1.255***是192.168.1网段的广播的地址*****/
baddr.sin_addr.s_addr=inet_addr("192.168.1.255");
/******************/
if((sockfd= socket(AF_INET,SOCK_DGRAM,0))<0)
{
perror("socket:");
exit(-1);
}
/******************广播发送端不需要地址绑定*******/
//bind(sockfd,(struct sockaddr*)&baddr,&addr_len);
/******************设置sockfd 为网络广播方式*******/
int on=1;
setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));
while(1)
{
fgets(buf,10,stdin);
/******************通过广播地址发送*************/
sendto(sockfd,buf,10,0,(struct sockaddr*)&baddr,sizeof(baddr));
}
}
接受端
#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <strings.h>
#include <stdlib.h>
int main(void)
{
int sockfd;
struct sockaddr_in baddr;
struct sockaddr_in rcvd;
int addr_len=sizeof(baddr);
char buf[100];
bzero(&baddr,sizeof(baddr));
baddr.sin_family=AF_INET;
/**********接受端的端口必须与发送端口一致**********/
baddr.sin_port=htons(9000);
/**********0.0.0.0 代表本地通讯接口***************/
baddr.sin_addr.s_addr=inet_addr("0.0.0.0");
if((sockfd= socket(AF_INET,SOCK_DGRAM,0))<0)
{
perror("socket:");
exit(-1);
}
/******************绑定通讯端口*******************/
bind(sockfd,(struct sockaddr*)&baddr,addr_len);
/******************设置通讯模式为广播模式*********/
int on=1;
setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));
while(1)
{
//fgets(buf,10,stdin);
/*************打印接受端口******************/
recvfrom(sockfd,buf,10,0,(struct sockaddr*)&rcvd,&addr_len);
printf("%d\n",ntohs(rcvd.sin_port));
}
}