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