"Alexander Ausserstorfer" <
bavari...@chiemgau-net.de> schrieb im
Newsbeitrag news:440e73bd52....@bavariasound.chiemgau-net.de...
> Hallo,
>
> momentan versuche ich mich an einem kleinen Programm, bei dem man den
> Hostnamen eingeben kann und das die Hostnummer in lesbarer Form ausgeben
> soll:
>
> #include <stdio.h>
> #include <sys/socket.h> // AF_INET
> #include <netdb.h> // struct hostent
> #include <netinet/in.h> // struct sockadd_in
>
> main()
> {
> // Required data
> const char servername[15];
> printf("Please type in server name: ");
> scanf("%c",&servername);
hier liest Du nur ein Zeichen und keinen String, und zwar nicht in eine
string Variable, sondern in einen Pointer auf string.
Es muss
scanf("%s",servername);
heiᅵen.
> // converting server name in IP number
> const char serverIP[16]="";
> struct hostent *hostinfo=0; // enry in host database
> hostinfo=gethostbyname(servername); // converting name in IP number
hostinfo liefert NULL, wenn es keinen passenden host findet.
Mit NULL macht inet_ntop(..., &hostinfo->h_addr_list, ...) einen
Speicherzugriffsfehler.
Du brauchst
if(hostinfo)
{
inet_ntop...
printf...
}
> // converting IP number in human readable format
> inet_ntop(AF_INET,&hostinfo->h_addr_list,&serverIP,16);
h_addr_list ist ein array von IPs. Du brauchst aber nur die erste
h_addr_list[0].
Das & ist wieder zuviel. Sonst ergibt sich daraus ein Pointer, der Dir nicht
weiterhilft.
Auch bei serverIP ist das & zuviel. serverIP ist schon ein Pointer auf char,
ein String.
Es muss heiᅵen:
inet_ntop(AF_INET, hostinfo->h_addr_list[0], serverIP, 16);
> printf("IP: %s\n\n",&serverIP);
Auch hier ist das & zuviel.
> }
>
> Leider kommt bei mir immer die gleiche Hostnummer heraus. Man merkt nur
Das verstehe ich nicht. Da Du nur ein char an Stelle eines Strings einliest,
sollte auch bei Dir hostinfo immer NULL sein und sich damit immer ein
Speicherzugriffsfehler ergeben.
> einen Unterschied, ob man online ist oder nicht. Hat jemand eine Idee,
Woran merkst Du, ob Du online bist?