#include"net.h"
int main(int argc, const char *argv[])
{
int fd = -1;
struct sockaddr_in sin;
//1
if((fd = socket(AF_INET,SOCK_DGRAM,0)) < 0)
{
perror("socket");
exit(1);
}
//2youhua
int b_reuse = 1;
setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&b_reuse,sizeof(int));
//3tianchong
bzero(&sin,sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = htons(SERV_PORT);
sin.sin_addr.s_addr = htonl(INADDR_ANY);
//4
if(bind(fd,(struct sockaddr *)&sin,sizeof(sin)) < 0)
{
perror("bind");
exit(1);
}
printf("receiver staring...ok\n");
//5
char buf[BUFSIZ];
struct sockaddr_in cin;
socklen_t addrlen = sizeof(sin);
while(1)
{
bzero(buf,BUFSIZ);
if(recvfrom(fd,buf,BUFSIZ-1,0,(struct sockaddr *)&cin,&addrlen) < 0)
{
perror("recvfrom");
continue;
}
char ipv4_addr[16];
if(!inet_ntop(AF_INET,(void *)&cin.sin_addr,ipv4_addr,sizeof(cin)))
{
perror("inet_ntop");
exit(1);
}
printf("Recived boardcast data %s",buf);
if(!strncasecmp(buf,QUIT_STR,strlen(QUIT_STR)))
{
printf("Client(%s:%d) is exiting\n",ipv4_addr,ntohs(sin.sin_port));
}
}
close(fd);
return 0;
}