广播服务器端:
/* * ===================================================================================== * * Filename: tserv.c * * Description: * * Version: 1.0 * Created: 2012年02月23日 15时15分57秒 * Revision: none * Compiler: gcc * * Author: MaZheng (blog.youkuaiyun.com/mazheng1989), mazheng19891019@gmail.com * Company: Dalian University Of Technology * * ===================================================================================== */ #include <stdio.h> #include <unistd.h> #include <sys/socket.h> #include <arpa/inet.h> #include <sys/ioctl.h> #include <string.h> #include <time.h> #define BUFLEN 255 /* */ void getcurtime(char *curtime) { time_t tm; time(&tm); /*在curtime中放入当前时间的asc表示*/ snprintf(curtime,BUFLEN,"%s\n",ctime(&tm)); } int main(int argc,char **argv) { struct sockaddr_in peeraddr; int sockfd,on=1; char msg[BUFLEN+1]; if(argc!=3) { printf("usage:%s<ip address><port>\n",argv[0]); exit(0); } sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd<0) { fprintf(stderr,"socket creating error in tserv.c\n"); exit(1); } setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(int));/*设置广播方式*/ memset(&peeraddr,0,sizeof(struct sockaddr_in)); peeraddr.sin_family=AF_INET; if(inet_pton(AF_INET,argv[1],&peeraddr.sin_addr)<=0) { printf("Wrong dest IP address\n"); exit(0); } int temp; sscanf(argv[2],"%d",&temp); peeraddr.sin_port=htons(temp); for(;;) { getcurtime(msg); int a; a=sendto(sockfd,msg,strlen(msg),0,(struct sockaddr *)&peeraddr,sizeof(struct sockaddr_in)); printf("%d\n",a); fflush(stdout); sleep(10); } return 0; }运行命令:$:gcc tserv.c -o tserv
$:./tserv 222.26.218.255 1234 (222.26.218.255为本地inet广播地址,查看方法为命令为:$:ifconfig )
广播客户端:
/* * ===================================================================================== * * Filename: tcli.c * * Description: * * Version: 1.0 * Created: 2012年02月23日 15时38分26秒 * Revision: none * Compiler: gcc * * Author: MaZheng (blog.youkuaiyun.com/mazheng1989), mazheng19891019@gmail.com * Company: Dalian University Of Technology * * ===================================================================================== */ #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #include <string.h> #include <stdio.h> #define BUFLEN 255 /* */ int main(int argc,char **argv) { struct sockaddr_in localaddr; int sockfd,n; char msg[BUFLEN+1]; if(argc!=2) { printf("usage:%s <port>\n",argv[0]); exit(0); } sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd<0) { fprintf(stderr,"socket creating error in tcli.c\n"); exit(1); } memset(&localaddr,0,sizeof(struct sockaddr_in)); int temp; sscanf(argv[1],"%d",&temp); localaddr.sin_port=htons(temp); localaddr.sin_addr.s_addr=htonl(INADDR_ANY); int opt=SO_REUSEADDR; setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); if(bind(sockfd,(struct sockaddr*)&localaddr,sizeof(struct sockaddr_in))<0) { fprintf(stderr,"bind error in tcli.c\n"); exit(2); } n=read(sockfd,msg,BUFLEN); if(n==-1) { fprintf(stderr,"read error in tcli.c\n"); exit(3); } else { msg[n]=0; printf("%s",msg); } return 0; }