广播服务器端:
/* * ===================================================================================== * * 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;
}