c - gethostbyname() 未知错误

标签 c sockets

我正在尝试从给定域接收 IP 地址。域名从客户端发送到本地服务器,在服务器中我需要找到 IP。

这是我的代码:

int hostname_to_ip(char * hostname, char* ip)
{
    struct hostent *he;
    struct in_addr **addr_list;
    int i;

    if ( (he = gethostbyname( hostname ) ) == NULL) 
    {
        herror("gethostbyname");
        return 1;
    }

    addr_list = (struct in_addr **) he->h_addr_list;

    for(i = 0; addr_list[i] != NULL; i++) 
    {
        strcpy(ip , inet_ntoa(*addr_list[i]) );
        return 0;
    }

    return 1;
}

int main() {
    int s;
    struct sockaddr_in server, client;
    int c, l, i;
    char buffer[100];
    char ip[100];
    struct hostent *ipAddress;
    struct in_addr **addr_list;

    s = socket(AF_INET, SOCK_DGRAM, 0);
    if (s < 0) {
        printf("Socket creation error!\n");
        return 1;
    }

    memset(&server, 0, sizeof(server));
    server.sin_port = htons(1234);
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;

    if (bind(s, (struct sockaddr *) &server, sizeof(server)) < 0) {
        printf("Bind error!\n");
        return 1;
    }

    l = sizeof(client);
    memset(&client, 0, sizeof(client));

    for (i = 0; i < 10000; i++) {
        recvfrom(s, &buffer, sizeof(buffer), MSG_WAITALL, (struct sockaddr *) &client, &l);
        printf("%s\n", "Client connected: ");
        printf("%s\n", buffer);
        char *host = buffer;
        hostname_to_ip(buffer, ip);
        printf("%s\n", ip);
    }

    close(s);
}

收到的消息是:未知主机,我找不到原因。

我确信我发送了正确的域名,例如“www.google.com”

最佳答案

看起来这个 for 循环格式错误:

for(i = 0; addr_list[i] != NULL; i++)  {
    strcpy(ip , inet_ntoa(*addr_list[i]) );
    return 0; 
}

它将在第一次迭代后退出并返回。

我将从解决这个问题开始。

关于c - gethostbyname() 未知错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40351911/

相关文章:

arrays - 如何确定 C 中数组的大小?

C - 将 9 转为 0

c - 文件和生成数字,c 编程

c - 收到 1 或 2 个后,从客户端读取数据包停止

java - TCP Socket 以 GZIP 压缩格式发送数据

c - 仅在 C 中读取数组外部是否危险

c++ - 如何获得调用堆栈回溯? (深度嵌入,无库支持)

c++ - 如何从 struct sockaddr(不是路由器 IP)获取互联网 IP?

java - InputStream的read()方法是如何实现的?

Android - 套接字与轮询