广播与多播编程

广播服务器端:

/* * ===================================================================================== * * Filename: tserv.c * * Description: * * Version: 1.0 * Created: 2012年02月23日 15时15分57秒 * Revision: none * Compiler: gcc * * Author: MaZheng (blog.csdn.net/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.csdn.net/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; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值