Seite 1 von 1 [10 Beiträge im Thema] | Beitrag schreiben | Anfang zurück weiter Ende |
JavaForum - Meckerecke - Ping mit Java
Hallo zusammen !
Ich will eine Art "ping" mit Java realisieren (um zu testen ob bestimmte Rechner im Netz erreichbar sind oder nicht).
Ich habe bisher folgende Variante versucht :
[...]try{
long tm = System.currentTimeMillis();
Socket so = new Socket("127.0.0.1",80);
so.close();
tm = System.currentTimeMillis() - tm;
}
catch( Exception ex )
{
System.out.println("Rechner nicht erreichbar");
}
[...]
bei dieser Variante muss ich allerdings immer eine Portnummer angeben.
Da ein Rechner nicht unbedingt Ports offen haben muss suche ich eine
Lösung bei der ich nur die IP Adresse verwende - ist dies mit Java zu
realisieren ?
Es gibt keinen ping, der nur eine Adresse benötigt. Es muss immer ein server (windows: dienst) laufen, der auch antwortet und so etwas antwortet eben nur auf Anfragen auf einem bestimmten Port.
Für ping ist irgendwo beschrieben, welcher Port standardmässig verwendet wird.
Ping verwendet übrigens ICMP, ob das so mit Bormitteln in Java geht, weiss ich nicht.
Im einzelnen damit befasst habe ich mich noch nicht, fasse die Antwort also eher als etwas ungefähres auf.
m3
hallo,
java kann kein ICMP.
geht also nur mit JNI.
viele grüße
tommi
Danke erstmal für die Antworten ...
Jetzt müsste ich nur noch genau wissen was JNI ist, bzw was du damit meinst :-)
Java Native Interface..
damit erhälst du die möglichkeit nativen code einzubinden,z.b. C oder C++.
deine ping funktion könnte dann in einer dll stecken und mittels JNI könntest du die jeweilige methode in deiner java applikation verwenden.
viele grüße
tommi
ICMP verwendet keine Portnummern. In diesem Punkt habe ich mich geirrt.
Nicht das ich glaube, dies würde hier eine Rolle spielen.
m3
ein etwas anderer ansatz (welcher aber ebenfalls zum ziel führt) aber mit einschränkungen :
idee (bau dir deinen ping selbst):
auf dem 'anzupingenden' rechner läuft ein javaprogramm welches ebenfalls aus deiner feder stammt. dann implementiere dort auch einen socket (in einem eigenen task), welcher auf dein ping (oder besser anfrage wie in deinem beispielprogramm) antwortet. verwende dazu eine portadresse jenseits der reservierten ports (so viel ich weiss > 1024).
einschränkungen :
- es lässt sich nicht jeder beliebige pc anpingen
- dein javaprogramm (mit dem ping zusatz) muss auf dem entsprechenden rechner ausgeführt werden
Thanx nochmal für die Hilfe. Leider geht genau das aus von Dir schon
benannten Gründen. Es geht unter anderen darum Netzwerkhardware anzupingen ..
Dort lässt sich schlecht ein Java Client installieren :-)
Trotzdem danke nochmal !
als 3. Möglichkeit könntest du natürlich auch mit der Runtime Klasse einfach den original pinbg befehl ausführen und auslesen
Hier mal ein beispiel, mit der windows ping methode, es gibt aber auch leute die sowas mal für java realisiert haben, sieh mla hier(habs allerdings nicht getestet):
http://www.geocities.com/SiliconValley/Bit/5716/ping/index_eng.html
Da gibt es dann eine PingICMP Klasse, die auf eine mitgelieferte DLL zurückgreift.
Windows ping BSP:
import java.io.*;
class ping{
static String line = "";
static void pingIt(String ipAddress) throws Exception{
Runtime r = Runtime.getRuntime();
Process p = r.exec("ping " + ipAddress);
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
// Prüfen ob ein Timout oder ein Reply zurückgekommen ist
while ((line = in.readLine()) != null) {
if(line.startsWith("Antwort von")){
System.out.println("host is alive");
break;
}
if (line.startsWith("Zeit")){
System.out.println("request timed out.");
break;
}
}
}
public static void main(String[] args) throws Exception {
pingIt(args[0]);
pingIt(args[1]);
}
}