2016-10-31 25 views
0

特定のドメインからIPアドレスを取得しようとしています。ドメインはクライアントからローカルサーバーに送信され、サーバーではIPを見つける必要があります。gethostbyname()不明なエラー

これは私のコードです:受信

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); 
} 

メッセージは次のとおりです。未知のホストと私は理由を見つけることができません。

私は、このような

それは、forループのようになります
+0

この名前はテストマシンで解決されます。さらに、http:// www.google.comではなく、 – pm100

+0

@ pm100をチェックして同じ結果を確認するだけです。非常に興味深いのは、hostname_to_ipだけが動作しているからです... –

+0

'recvfrom'はヌルターミネーターを追加していないことを知っていますか?あなたは 'www.google.comsdflehvyiu35tq35423xd34'ではなく' www.google.com'を探していますか? – immibis

答えて

0

が不正な形式である「www.google.com」として正しいドメインを送っていることを確信しています:

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

それは救済と後に戻ります非常に最初の反復。

私はそれを修正することから始めます。

+0

私は別にそれを取ると、とにかく関数が働いています。なぜなら、if((he = gethostbyname(hostname))== NULL) –

関連する問題