Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Socketprogramm...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.12.2005, 14:34 Uhr
silver



Servus...

ich hoffe ich finde hier paar Leute die mir bei meinen Problem helfen können.
Ich bin nicht so der Socketprogrammierer, aber ich muss eine Praktikumsaufgabe dazu lösen

"Schreiben Sie ein Programm zur zufallsgesteuerten Erzeugung von IP-Adressen, die einen Eintrag im Domain-Name-System haben. Achten Sie dabei darauf, dass Sie das DNS nicht überlasten. Die Anzahl der Anfragen pro Sekunde sollte 10 nicht übersteigen. Weiterhin sollen IP-Adressen generell nicht in der Liste der erzeugten Adressen erscheinen, wenn es sich dabei um die so genannten Private-IP-Adressen bzw. um Multicast- oder Broadcast-Adressen handelt....
...zeilenweise auf STDOUT in folgendem Format ausgegeben werden: IP-Adresse DNS-Name (Beispiel: 141.56.132.68 irn68.informatik.htw-dresden.de)..."

Okay der Prof hat uns eine Vorlage gegeben... einige Teilaufgaben konnt ich auch lösen... aber jetzt hängt es... ständig meckert der Compiler... ich weiß nicht wie ich die Addresse und den Namen von der DNS bekomme...

gethostbyaddr in Verbindung mit htonl soll der Schlüssel zum Erfolg sein... ich bekomm es aber nicht fehlerfrei implementiert
Ich füge mal die c Datei an... (wurde in VisualStudio erstellt)
Bei "hier Ihr Code", ziemlich weit am Schluss... sind meine Probleme... man sieht es ja an den Kommentaren die ich erstellt habe
// hp = gethostbyaddr ((char *) &addr, sizeof (addr), AF_INET); <-- weiß z.B. nicht, warum das nicht funktioniert ... aber seht selbst

www.htw-dresden.de/~s53772/code.c


Danke schonmal für Hilfe...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: