我正在使用 UNIX 套接字(作为家庭作业的一部分)编写一个 HTTP 客户端。我目前有这个工作代码来连接到给定的 IP 地址:
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
char *server_address = "127.0.0.1";
struct sockaddr_in address;
if (sockfd < 0) {
printf("Unable to open socket\n");
exit(1);
}
// Try to connect to server_address on port PORT
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr(server_address);
address.sin_port = htons(PORT);
if (connect(sockfd, (struct sockaddr*) &address, sizeof(address)) < 0) {
printf("Unable to connect to host\n");
exit(1);
}
但是,我现在想修改它,使其server_address
也可以是不是 IP 的东西,例如“google.com”。我一直在试图弄清楚如何使用 来做到这一点gethostbyname
,但我遇到了麻烦。
gethostbyname 是否会同时接受 IP 地址或“google.com”之类的地址并使其正常工作?(或者我应该先尝试在地址上运行正则表达式,如果它是 IP 地址,则执行其他操作)?
我已尝试使用以下代码尝试使其与“google.com”之类的东西一起使用,但我收到了警告warning: assignment makes integer from pointer without a cast
struct hostent *host_entity = gethostbyname(server_address);
address.sin_addr.s_addr = host_entity->h_addr_list[0];
我知道我做错了,但 gethostbyname 文档很糟糕。