📄 dgser_mul.c
字号:
/* * datagram multicast server for daytime service */#include "stdio.h"#include "errno.h"#include "signal.h"#include "netinet/in.h"#include "netdb.h"#include "sys/socket.h"#define DAYTIME 1113 /* port of UDP echo server */#define MULTICAST_IP "224.0.3.1"#define INTERFACE "127.0.0.1"#define MAXLINE 120/*this is the same as chapter 8 ,udp server */void dg_echo(int sockfd);int main(int argc, char *argv[]){ int sockfd,maxfdp1; int n ,socklen; struct sockaddr_in ser_addr,local_addr/*getsockname */; struct ip_mreq mreq ; // const int on=1 ; /* to set SOL_REUSEADDR sockopt on */ if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { /* Udp */ perror("socket"); exit(1); } if(inet_aton(MULTICAST_IP,&(mreq.imr_multiaddr))<=0){ /* IP multicast address of group */ perror("inet_aton"); exit(1); } if(inet_aton(INTERFACE,&(mreq.imr_interface))<0){ /* local IP address of interface */ perror("inet_aton"); exit(1); } /*set sockopt to add the multicast group*/ if(setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP, &(mreq),sizeof(mreq))<0){ perror("setsockopt"); exit(1); } /*set SOL_REUSEADDR */ /* if(setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&on,sizeof(on))<0){ perror("setsockopt"); exit(1); */ ser_addr.sin_family = AF_INET; /* host byte order */ ser_addr.sin_port = htons(DAYTIME); /* short, network byte order */ if(inet_aton(MULTICAST_IP,&(ser_addr.sin_addr))<=0){ perror("inet_aton"); exit(1); } bzero(&(ser_addr.sin_zero), 8); /* zero the rest of the struct */ if(bind(sockfd,(struct sockaddr*)(&ser_addr), sizeof(struct sockaddr))<0){ perror("bind"); exit(1); } dg_echo(sockfd); close(sockfd); exit(0);} void dg_echo(int sockfd){ struct sockaddr_in cli_addr; int size_sock; char mesg[MAXLINE]; socklen_t socklen; int n; size_sock=sizeof(struct sockaddr); for(;;){ socklen=size_sock; n=recvfrom(sockfd,mesg,MAXLINE,0,&cli_addr,&socklen); /* this will block for client's coming */ if(n<0) { perror("recvfrom"); exit(1); }else if(n==0) return ; if(sendto(sockfd,mesg,n,0,&cli_addr,socklen)<n) { perror("recvfrom"); exit(1); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -