Momentan verwende ich diesen Code zum Abrufen des Ping eines Zielsystems. Allerdings funktioniert es bisher nur unter Linux und ist wahrscheinlich abhängig von den Gebietsschemaeinstellungen. Das Hinzufügen von Unterstützung für Windows wird wahrscheinlich noch komplizierter. Gibt es einen einfachen Weg oder eine Bibliothek, um den Ping eines Zielsystems zu erhalten? Ich arbeite hauptsächlich mit Qt, also wäre es ideal, wenn ich mit QSockets arbeiten könnte.
%Vor% Sie müssten Ihren Code dafür ohne QAbstractSocket
schreiben. Kurz gesagt, diese Basisklasse wurde nicht für diesen Anwendungsfall entwickelt.
Der Grund ist, dass Sie rohe Sockets verwenden und als root ausführen müssen; Das ist auch der Grund, warum Sie normalerweise das Setuid-Flag in der ausführbaren Ping-Datei von Linux sehen.
ICMP ist "verbindungslos" und daher ist die Qt-Klasse nicht dafür geeignet, da es keine Daten an einen bestimmten Host sendet usw.
Sie können die ausführlichere Erklärung hier lesen.
>Nejats Code funktionierte auch nicht für mich. Vielleicht ist es Windows-spezifisch (getestet unter Windows 7 x64 + Qt 5.6). Der Ping-Befehl scheint Parameter und Werte zu unterscheiden und benötigt diese beim Erstellen von QProcess.
Anstatt also "-n 1" auf einmal zu übergeben, müssen Sie "-n" und "1" getrennt übergeben.
Grundsätzlich wäre es mit Nejats Code:
%Vor%Getestet und funktioniert jetzt.
Tags und Links c++ qt ping qtnetwork qabstractsocket