001
30.12.2005, 14:44 Uhr
Tron
|
Hi
habe Deinen Code nur kurz überflogen zu Sockets unter Windows
nicht vergessen unter Linkeroptionen die ws2_32.lib mit aufzunehmen
Bearbeitung: |
/* Bringt Fehler */ /*#ifdef WIN32 WSADATA wsaData; if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) { printf("WSA-init failed...\n"); exit(1); } #endif */
|
WSAStartup ist zum initialisieren der WS2_32.DLL zur Nutzung durch einen Prozess was man startet sollte man auch nach gebrauch wieder aufräumen WSACleanup() nicht vergessen. javascript:insert_smiley('')
Das Makro MAKEWORD übergibt die Versionnummer der verwendeten Socketversion, wsa ist ein Pointer auf WSADATA wird hier nicht benötigt.
zu Deinem Problem der Auflösung ein Beispiel:
C++: |
/** Eine IP oder Hostname ?
Die Windows Sockets inet_addr Funktion konvertiert einen String welcher eine (Ipv4) Internet Protokoll punktierte Adresse beinhaltet in eine passende Adresse für die IN_ADDR Struktur. Bei einem Fehler liefert inet_addr den Rückgabewert INADDR_NONE.
struct in_addr { union { struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { u_short s_w1,s_w2; } S_un_w; u_long S_addr; } S_un;
z.B.: Wird ein Hostname bzw ein FQDN übergeben liefert inet_addr den Rückgabewert INADDR_NONE. Wird eine IP übergeben liefert inet_addr einen Wert ungleich INADDR_NONE. */
struct hostent *host; unsigned long ip; ip = inet_addr(adr);
if(ip!=INADDR_NONE) { /** bei einem Fehler liefert gethostbyaddr einen NULL Pointer zurück. */ if (((host = gethostbyaddr((char *) &ip, sizeof(ip), AF_INET)) == NULL)) { cout<<"\n\tKein Hostname zur IP " <<adr <<" gefunden!\n"<<endl; return 1; } else { /** gethostbyaddr liefert einen Pointer an die hostent Struktur zurück. */ host = gethostbyaddr((char *) &ip, sizeof(ip), AF_INET); cout<<"\n\tDer Hostname zur IP "<<adr <<" lautet " <<host->h_name <<"\n"<< endl; } }
|
adr ist die übergebene IP. das sollte Dir erstmal weiter helfen.
Ansonsten solltest Du Dir mal folgende Seite ansehen. www.c-worker.ch
Tron |