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

📄 rec.c

📁 linux下的C。点对点一收一发测试_192.168.0.1发_192.168.0.2收
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netdb.h>char *hostname = "192.168.0.1" ;char *multicase = "224.10.201.1" ;char *localip = "192.168.0.2" ;int port = 6789 ;int main(){	struct ip_mreq command ;	int loop = 1 ;	int iter = 0 ;	int sin_len ;	char message[256] = "" ;	int socket_des ;	struct sockaddr_in sin ;	struct hostent *server_host_name ;		if ( (server_host_name = gethostbyname(hostname)) == 0 )	{		printf("gethostbyname error\n") ;		exit(EXIT_FAILURE) ;	}		bzero(&sin,sizeof(sin)) ;	sin.sin_family = AF_INET ;	sin.sin_addr.s_addr = inet_addr(localip) ;	sin.sin_port = htons(port) ;	if ( (socket_des = socket(AF_INET,SOCK_DGRAM,0)) == -1 )	{		printf("create socket error\n") ;		exit(EXIT_FAILURE) ;	}		loop = 1 ;	if ( setsockopt(socket_des,SOL_SOCKET,SO_REUSEADDR,&loop,sizeof(loop))<0)	{		printf("setsockopt:SO_REUSEADDR\n") ;		exit(EXIT_FAILURE) ;	}	if ( bind(socket_des,(struct sockaddr*)&sin,sizeof(sin)) < 0 )	{		printf("bind error\n") ;		exit(EXIT_FAILURE) ;	}	loop = 1 ;	if ( setsockopt(socket_des,IPPROTO_IP,IP_MULTICAST_LOOP,&loop,sizeof(loop))<0)	{		printf("setsockopt:IP_MULTICAST_LOOP\n") ;		exit(EXIT_FAILURE) ;	}	command.imr_multiaddr.s_addr = inet_addr(multicase) ;	command.imr_interface.s_addr = inet_addr(localip) ;		if ( command.imr_multiaddr.s_addr == -1 )	{		printf("%s not a legal multicast address\n",multicase) ;		exit(EXIT_FAILURE) ;	}	if ( setsockopt(socket_des,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&command,sizeof(command)) < 0 )	{		printf("setsocketopt:IP_ADD_MEMBERSHIP\n") ;		exit(EXIT_FAILURE) ;	}	while(iter++ < 10)	{		sin_len = sizeof(sin) ;		if ( recvfrom(socket_des,message,256,0,(struct sockaddr*)&sin,&sin_len) == -1 )		{			printf("recv error\n") ;			exit(EXIT_FAILURE) ;		}		printf("Response #%-2d from server:%s\n",iter,message) ;		sleep(2) ;	}	if ( setsockopt(socket_des,IPPROTO_IP,IP_DROP_MEMBERSHIP,&command,sizeof(command)) < 0 )	{		printf("setsockopt:IP_DROP_MEMBERSHIP\n") ;		exit(EXIT_FAILURE) ;	}	close(socket_des) ;	exit(EXIT_SUCCESS) ;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -