客户端demo01的代码中,有关指定服务端的ip地址问题
来源:4-2 解决TCP粘包和分包的问题

江南小生
2023-03-07
// 第1步:创建客户端的socket。
int sockfd;
if ( (sockfd = socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket"); return -1; }
// 第2步:向服务器发起连接请求。
struct hostent* h;
if ( (h = gethostbyname(argv[1])) == 0 ) // 指定服务端的ip地址。
{ printf("gethostbyname failed.\n"); close(sockfd); return -1; }
struct sockaddr_in servaddr;
memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(atoi(argv[2])); // 指定服务端的通讯端口。
memcpy(&servaddr.sin_addr,h->h_addr,h->h_length);
吴哥您好。上面这段客户端demo的代码中,指定服务端的ip地址用到了gethostbyname()函数和memcpy()函数,这里没有和服务端demo那样采用给servaddr.sin_addr.s_addr
赋值。下面这行代码也能实现指定服务端的ip地址功能
servaddr.sin_addr.s_addr =inet_addr(argv[1]);
在客户端代码中不这样用是因为有什么缺陷吗
写回答
1回答
-
对客户端来说,用gethostbyname(),参数可以填ip地址,也可以填域名,如果用inet_addr()函数,只能填ip地址,不能用域名。
10
相似问题