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ループのようになります
この名前はテストマシンで解決されます。さらに、http:// www.google.comではなく、 – pm100
@ pm100をチェックして同じ結果を確認するだけです。非常に興味深いのは、hostname_to_ipだけが動作しているからです... –
'recvfrom'はヌルターミネーターを追加していないことを知っていますか?あなたは 'www.google.comsdflehvyiu35tq35423xd34'ではなく' www.google.com'を探していますか? – immibis