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

📄 daytimetcpcli2.c

📁 unix网络编程卷1:套接口API的全书源码
💻 C
字号:
#include	"unp.h"intmain(int argc, char **argv){	int					sockfd, n;	char				recvline[MAXLINE + 1];	struct sockaddr_in	servaddr;	struct in_addr		**pptr, *addrs[2];	struct hostent		*hp;	struct servent		*sp;	if (argc != 3)		err_quit("usage: daytimetcpcli2 <hostname> <service>");	bzero(&servaddr, sizeof(servaddr));	servaddr.sin_family = AF_INET;	if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) == 1) {		addrs[0] = &servaddr.sin_addr;		addrs[1] = NULL;		pptr = &addrs[0];	} else if ( (hp = gethostbyname(argv[1])) != NULL) {		pptr = (struct in_addr **) hp->h_addr_list;	} else		err_quit("hostname error for %s: %s", argv[1], hstrerror(h_errno));	if ( (n = atoi(argv[2])) > 0)		servaddr.sin_port = htons(n);	else if ( (sp = getservbyname(argv[2], "tcp")) != NULL)		servaddr.sin_port = sp->s_port;	else		err_quit("getservbyname error for %s", argv[2]);	for ( ; *pptr != NULL; pptr++) {		sockfd = Socket(AF_INET, SOCK_STREAM, 0);		memmove(&servaddr.sin_addr, *pptr, sizeof(struct in_addr));		printf("trying %s\n",			   Sock_ntop((SA *) &servaddr, sizeof(servaddr)));		if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) == 0)			break;		/* success */		err_ret("connect error");		close(sockfd);	}	if (*pptr == NULL)		err_quit("unable to connect");	while ( (n = Read(sockfd, recvline, MAXLINE)) > 0) {		recvline[n] = 0;	/* null terminate */		Fputs(recvline, stdout);	}	exit(0);}

⌨️ 快捷键说明

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