C++ IP-Liste einlesen und anpingen

Sieht gut aus und kapiert habe ich es nun auch!

Jedoch sagt er mir beim kompilieren:

Kompilieren...
main.cpp
.\main.cpp(160) : error C3861: "ResolveHost": Bezeichner wurde nicht gefunden.

Habe schon gegoogelt, aber nichts gefunden was ich hätte verwerten können, oder was etwas gebracht hätte...
 
ne alles so wie du es gesagt hast, eigentlich auch alles includiert und es ist auch die richtige datei gewesen

EDIT:

aah mist, sry hatte ausversehen beim einfügen der änderungen einen kleinen abschnitt überschrieben, sodass er es nicht mehr korrekt lesen konnte.
Aber nun geht er!


Sau geil von dir! :)
 
Zuletzt bearbeitet:
Und das Ping hat als einzige Änderung einen Aufruf von ResolveHost drinnen
dH du kannst dem Ping jetzt alles direkt übergeben: IPs, Rechnernamen, URLs...
URLs wohl eher nicht, da gethostbyname nur IP-Adressen oder Hostnamen entgegennimmt. Abgesehen davon ist die Funktion obsolet, es sollte stattdessen getaddrinfo verwendet werden.

Grüße,
Matthias
 
getaddrinfo hab ich schon weiter vorne erwähnt
Und ich weis nicht, ob es URLs generell auflösen kann, aber http://www.google.com hat funktioniert :)

PS: Sorry, doch nicht erwähnt.
Angefangen hat die Unterhaltung über priv. Nachrichten, da stehts drin

PPS: Wieder was gelernt
 
Zuletzt bearbeitet:
Bez. priv. Nachricht:

Wegen deinem Codestück:
ip ist erstens einmal EIN String, kein Stringarray.
mit ip[0] etc greife ich auf die Einzelnen Zeichen zu.

In der ersten Anweisung radiere ich den aktuellen Inhalt von ip raus-es bleibt ein leerer String, der bis zu 64 Zeichen aufnehmen kann.

Anw2:Aus der Datei wird eine Zeile eingelesen (die IPs stehn ja zeilenweise drinnen) und in ip gespeichert. Falls die aktuelle Zeile länger als 64 Zeichen ist (sollte für eine IP eigentlich reichen, und ip kann eben max. soviel aufnehmen), wird der Rest einfach abgeschnitten.
Über 64 Zeichen ist es sowieso keine gültige IP, da ist der Rest auch schon egal.

Anw3:
eim einlesen macht die genannte Funktion selber ein '\0' zum Schluss, um das Stringende zu markieren.
Falls wirklich 64 Zeichen erreicht wurdenund etwas abgeschnitten wurde, war ich mir nicht sicher, ob fgets das mit der '\0' wohl ordentlich macht, also habs ichs halt selber nocheinmal im Code: Das letzte verfügbare Zeichen von ip wird auf '\0' gesetzt.
Falls das gleiche '\0' nicht schon vorher vorkommt, "merken" die anderen Sachen, die den String danach brauchen, spätestens hier, dass Schluss ist.

Anweisung4: Fällt mir gerade auf dass das nicht so toll ist, sicherer ists so...
Code:
if (ip[0]!='\0'&&ip[ strlen( ip ) - 1 ] == '\n' )
            ip[ strlen( ip ) - 1 ] = '\0';
fgets hängt nämlich, wenn es die Zeile fertig eingelesen hat, auch noch gern '\n' ins ip rein, dass in einer Datei quasi ein Zeilenwechsel ist. Eingelesen bei der IP kann man das aber nicht mehr brauchen

dh wenn überhaupt was in ip drin ist und das letzte Zeichen ein Zeilenwechsel ist, kommt der weg, indem der String einfach um eins gekürzt wird.


Und wegen deiner anderen Frage: Poste den betreffenden Code bitte einmal, ich hab keine Ahnung um welche Stelle es da geht.
 
Ahh, ich glaube nun habe ich es geschnallt,
aber open bei der Deklaration von ip steht char ip[ 64 ]; Also ist es doch ein char und kein String oder?

Ich fasse nochmal zusammen:
Also er liest eine Zeile ein, packt davon 64 Zeichen in ip, bastelt da noch etwas dran rum wenn es zu lang ist schneidet er es usw. makiert die Stelle wo es aufhört
Dann übergibt er ip an die Ping() Funktion, die wiederum an andere sodass darin enthaltene ip aufgelöst wird und ein Wert zurück kommt, der dann ausgewertet wird.
Und da das ganze ja in einer Endlosschleife steht, fängt die Geschichte wieder von vorne an, nur das er diesmal eine IP weitergeht in der Liste.

Danke dir nochmal
 
Also, in einer Endlosschleife sollte es nicht stehen, am Ende der Datei sollte es doch aufhören

Bezüglich ip: Ein char ist ein einzelnes Zeichen.
Kann Ein Buchstabe sein, eine Ziffer oder sonst irgendwas aus der ASCII-Tabelle.
ip ist genaugenommen ein char-Array, das bis zu 64 chars speichern kann.
Und ein Haufen Buchstaben etc ist halt nichts anderes wie ein String...
Die 64-Grenze hab ich mir damals halt so ausgesucht, es gibt nämlich keine längere IP und die Zahl ist mir halt als erstes eingefallen :)

Die '\0' am Stringende haben die Erfinder von C (oder sonst irgendwer damals, keine Ahnung) sich damals eben ausgesucht, um das Stringende zu markieren, weil ein Array mit max. 64 Buchstaben ja auch kürzere Sachen drinnen haben kann
Es müssen ja nicht immer genau 64 Buchstaben sein.
 
ja, ich meinte natürlich ein char array

Das mit der Endlosschleife habe ich nicht deutlich genug beschrieben, er wiederholt den Vorgang, aber oben an der Schleife, steht ja eine Abfrage, wenn am Ende der Datei... dann springe zum Anfang und zähl bis 60 hoch anschließend macht er weiter pingt, pingt pingt usw. Solange eben bis man das Programm schließt
 
Zurück