Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Hostnamen und -nummern

5 views
Skip to first unread message

Alexander Ausserstorfer

unread,
Aug 11, 2012, 3:05:23 AM8/11/12
to
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);

// 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

// converting IP number in human readable format
inet_ntop(AF_INET,&hostinfo->h_addr_list,&serverIP,16);
printf("IP: %s\n\n",&serverIP);
}

Leider kommt bei mir immer die gleiche Hostnummer heraus. Man merkt nur
einen Unterschied, ob man online ist oder nicht. Hat jemand eine Idee,
was ich falsch gemacht habe? (Habe kaum C-Erfahrung).

Danke.

A.

Heinrich Wolf

unread,
Aug 11, 2012, 4:32:12 AM8/11/12
to

"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?

Alexander Ausserstorfer

unread,
Aug 21, 2012, 2:15:59 AM8/21/12
to
In message <k0559v$v3k$1...@news.m-online.net>
"Heinrich Wolf" <inv...@invalid.invalid> wrote:

[Teil der Antwort geschnippt]

Danke f�r die schnelle Antwort. Ich muss zugeben, dass es einige Zeit
her ist, als ich das letzte Mal in C programmierte. Ich musste mich erst
wieder reinfinden. Die Antwort hat mir dabei sehr geholfen.

>> 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.

Ich hatte das Programm kurz vor dem Posten abge�ndert, da ich gewisse
Zugriffsdaten nicht ver�ffentlichen wollte. Dabei ist mir ein
Fl�chtigkeitsfehler unterlaufen.

>> einen Unterschied, ob man online ist oder nicht. Hat jemand eine Idee,
>
>Woran merkst Du, ob Du online bist?

Das Modem hat sich eingew�hlt und am Bildschirm erscheint die Meldung,
dass man verbunden ist. Ganz klassisch halt ;-)

Mit dem Programm kann ich inzwischen E-Mails vom Server holen.

--
Chiemgau, Bavaria, European Alps
0 new messages