客户端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回答

长歌_吴从周

2023-03-07

对客户端来说,用gethostbyname(),参数可以填ip地址,也可以填域名,如果用inet_addr()函数,只能填ip地址,不能用域名。

1
0

C/C++气象数据中心实战,手把手教你做工业级项目

通过技术的实际应用,掌握等同2年经验的技术能力

968 学习 · 401 问题

查看课程