ich habe versucht, einen Rechner (auch "localhost") per ping zu erreichen.
Bei der Ausführung des Programms erhalte ich immer folgende Meldung:
java.net.ConnectException: Connection refused: no further information
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:312)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:125)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:112)
at java.net.Socket.<init>(Socket.java:273)
at java.net.Socket.<init>(Socket.java:100)
at test.test.main(test.java:18)
Der Quelltext stammt u.a. aus dem Buch "Java ist auch eine Insel" und sieht
folgendermaßen aus:
package test;
import java.io.*;
import java.net.*;
public class test
{
public static void main(String args[]) throws Exception
{
String test = "Pingtest";
if ( args.length == 0 )
{
System.err.println( "Bitte Ping-Host angeben" );
System.exit(0);
}
Socket t = new Socket(args[0], 7);
System.out.print("muh");
BufferedReader in = new BufferedReader(new InputStreamReader
(t.getInputStream()));
PrintStream os = new PrintStream(t.getOutputStream());
os.println(test);
String s = in.readLine();
if (s.equals(test)) System.out.println("Alive!") ;
else System.out.println("Dead or echo port not responding");
t.close();
}
}
Warum erhalt ich immer dies Exception, was mache ich falsch? Sorry..., bin
halt noch ein newbie.
Andreas
> java.net.ConnectException: Connection refused: no further information
Er kann auf dem Port also nicht connecten.
> Socket t = new Socket(args[0], 7);
Ah - das sollte es sein.
Er versucht eine Verbindung mit Port 7 (aka Echo-Server unter UNIX)
aufzumachen.
Wenn du Windoze hast ist da Essig, weil hinter Port 7 nix is.
mfG Arne
> java.net.ConnectException: Connection refused: no further information
[...]
> Socket t = new Socket(args[0], 7);
Und was läuft auf dem "angepingten" Rechner auf Port 7? Nichts? Das ist dann
wohl das Problem.
Zitat aus dem Buch: "Am einfachsten ist der Aufbau zu dem Echo-Server, ein
Service, der alle
ankommenden Kommandos gleich wieder zurückschickt. Wir senden also ein
Testword hin
und überprüfen, ob das gleiche wieder zurückkommt.
Die Verbindung zum Echo-Server herzustellen ist mit der Socket-Klasse kein
Problem. Da
der Echo-Service immer an Port 7 liegt, eröffnet die Anweisung
Sokket(IPAdress,7) die
Verbindung." - vielleicht hätte der Autor auch erwähnen sollen, dass nicht
auf jedem Rechner ein "Echo-Server" läuft....
Kann man durch ausführen von 'netstat -a -n | find "7"' überprüfen - wenn
das irgendwo eine Zeile auftaucht in der "Listen" (oder "Abhören") steht,
dann ist das ein seltsames Problem (eventuell irgendeine Firewall im
Spiel?), das erwarte ich aber eigentlich eher nicht :-)
Nico
>ich habe versucht, einen Rechner (auch "localhost") per ping zu erreichen.
Es gibt leider derzeit keine mir bekannte Methode um ein sehr vom OS
abhängiges Kommando wie PING zu realisieren. Du könntest höchstens das Ping
vom OS ausführen und den Rückgabecode bzw. die Ausgabe analysieren ...
--
cu
o.pfeiffer
ICQ# 84320006
eMail oliver....@gmx.net
--------------------------------------------
TECHNOLOGIE - ZENTRUM INFORMATIK / UNIVERSITAET BREMEN / GERMANY
Für ein Ping muss man doch eine RAW Socket aufmachen, geht das überhaupt mit Java?
--
Uwe
> Für ein Ping muss man doch eine RAW Socket aufmachen, geht das überhaupt
> mit Java?
Soviel ich weiß nicht, zumindest nicht mit pure Java (Native code über JNI
geht natürlich). Unter Windows 2000 ist es schon in C++ schwierig, einen
raw socket zu bekommen, das geht nur mit Administratorrechten.
>Soviel ich weiß nicht, zumindest nicht mit pure Java (Native code über
>JNI geht natürlich). Unter Windows 2000 ist es schon in C++ schwierig,
>einen raw socket zu bekommen, das geht nur mit Administratorrechten.
naja, aber das echte ping ist doch auch in cpp programmiert und das kann
schließlich jeder benutzer ausführen ... :)
Gibt es da nicht ein Problem, da das Ping-Kommando unter Linux etwas anders
aufgerufen wird?
Andreas