⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dgser_mul.c

📁 Linux 下面多播程序发送接受例子程序
💻 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 + -