# Ping mit isReachable realisieren ?



## Uriel64 (19. Apr 2011)

Hallo Leute,
ich hab hier ein kleines Problem, und zwar versuche ich so etwas wie einen ping Befehl in Java zu realisieren...
Ich hab es jetzt mit isRechable versucht aber so langsam denke ich mir das das vielleicht der falsche Ansatz war.


```
public boolean check() throws Exception {

        InetAddress address = InetAddress.getByName("209.85.149.104");
        
        if ( address.isReachable(2000) ) { return true;  }
        else                             { return false; }

    }
```

Die eingetragene IP Adresse ist die von Google, wenn ich jetzt die Methode ausführe returned sie false
Trage ich allerdings eine IP Adresse aus meinem Netzwerk (192.168.X.XX) ein so returned sie true.

Jetzt habe ich mir gedacht das da irgendwas nicht stimmen kann und mein Ansatz eventuell falsch ist.

Ich hoffe irgendjemand kann mich mal aufklären und mir ev. einen Lösungsweg bieten.


----------



## Michael... (19. Apr 2011)

Nutzt Du eventuell einen Proxy für den Zugang ins Internet?

```
System.setProperty("proxyHost", myProxy);
System.setProperty("proxyPort", myProxyPort);
```


----------



## Uriel64 (19. Apr 2011)

> Nutzt Du eventuell einen Proxy für den Zugang ins Internet?


Nein


----------



## Uriel64 (20. Apr 2011)

Mir ist aufgefallen wenn ich die Funktion aus einer anderen Funktion mit check(); aufrufe,
bekomme ich vom Compiler die Meldung:
unreported exception java.lang.Exception; must be caugt or declared to be thrown

Wie würde ich das machen ?
Weil ich habe ja schon in der check() Funktion die Exception berücksichtigt...


----------



## Michael... (20. Apr 2011)

Uriel64 hat gesagt.:


> Weil ich habe ja schon in der check() Funktion die Exception berücksichtigt...


Nein, hast Du nicht. Du delegierst das Behandeln der Exceptions ja nach aussen (throws Exception). Das heisst jede Methode, welche die Methode check() nutzen will muss eine allgemeine Exception abfangen.

Hab mir mal die Doku zur Methode isReachable angeschaut, laut der der Erfolg dieser Methode recht fraglich scheint.

Geht es nur darum zu testen, ob eine Website oder ein Server erreichbar ist? Dann würde ich einfach versuchen eine URLConnection dorthin zu öffnen.
Oder man ruft einfach ping aus Java heraus auf und wertet die Ausgaben aus.


----------



## Andi_CH (20. Apr 2011)

Verblüffend was google so innert 0.32 Sekunden findet ;-)

Das da Das da ein wenig angepasst gibt das Folgende ...

Bei mir kommt:

```
Pech gehabt
Connection ok (port 80, time = 71 ms). 
Host Address = 74.125.77.147
Host Name    = www.google.ch
```


```
import java.net.*;

public class SimplePing {
	public static void main( String[] args ) {
		try {
			InetAddress host = InetAddress.getByName("www.google.ch");
			if (host.isReachable(2000))
				System.out.println("OK");
			else
				System.out.println("Pech gehabt");
			// port 80
			long   tm   = System.nanoTime();
			Socket so   = new Socket( host, 80 );
			so.close();
			tm = (System.nanoTime() - tm) / 1000000L;
			System.out.println( "Connection ok (port 80, time = " + tm + " ms). \n" +
					"Host Address = " + host.getHostAddress() + "\n" +
					"Host Name    = " + host.getHostName() );
			System.exit( 0 );
		} catch( Exception ex ) {
			System.out.println( "Error: " + ex.getMessage() );
			System.exit( 1 );
		}
	}
}
```


----------

