# Testen ob server online ist



## tester (10. Jul 2006)

Hi,
Ich habe folgendes Problem. Ich habe ein client server tool geschrieben. Wie kann ich jetzt vom client aus testen ob der server online ist?
Wenn er nicht online ist hängt das Programm immer am socket.
An dieser stelle.

```
Socket s=new Socket(ip,port);
```
Wie kann ich im vorraus klären ob der server online und erreichbar ist?
Das Problem ist ja das ich an dieser stelle noch kein timeout senden kann.
Hat einer eine idee?


----------



## millinär (10. Jul 2006)

falls er nicht ereichbar ist wird eine Exception ausgelös  
ich hab jetzt keine ahnung wie die heist weil ich fast immer alles als einfache Exception behandle 
aber was eine Exception ist weist du oder?

hab mal nachgeschaut : ich glaub ConnectException aber du musst generell alle IOExceptions abfangen

```
try{

Socket s=new Socket("342",34);
}
catch(ConnectException uhe){
// hier landest du falls der Server noch nicht online ist in der regel
}
catch(IOException ioe){

}
```

aber die Exception wird manchmal auch dann aufgerufen falls man aus einem anderen grund den server nicht erreicht
aber eigentlich sollte das reichen


----------



## derDachs (10. Jul 2006)

wie millinär schon sagt, die Exception benutzten, du kannst auch einfach nur Exception abfangen und einfach keine genaue bestimmen, dann wird zwar jede gefangen und du weist nicht welche es war, aber es stürzt halt nichts ab..

Excpetions sollte man immer einsetzen wenn möglich(nötig) also da wo critische vorgänge ablaufen, das ist einfach ein Grundgedanke den man so benutzen sollte, wie gewürze am essen.. 

mfG derDachs


----------



## derDachs (10. Jul 2006)

oh jetzt vergesse ich glatt mein eigendlichen Post...
du kannst den server auf jedenfall anpingen...

einfach mit runexec den pingbefehl des Betriebssystems nutzen..
die rückgaben des Programms mit getInputSteam des RunExec objects auslesen und fertig..

mfG der Dachs


----------



## Murray (11. Jul 2006)

derDachs hat gesagt.:
			
		

> du kannst den server auf jedenfall anpingen...
> 
> einfach mit runexec den pingbefehl des Betriebssystems nutzen..
> die rückgaben des Programms mit getInputSteam des RunExec objects auslesen und fertig..


Das muss aber nicht immer klappen - es besteht durchaus die Möglichkeit, in einem Netzwerk das "Anpingen" zu unterbinden, die eigentliche Socket-Verbindung aber zuzulassen.


----------



## AlArenal (11. Jul 2006)

Da hat Murray Recht. Ping ist ein Netzwerkservice, der wie jeder andere ein- und ausgeschaltet werden kann. Geht doch mal zum Spaß auf www.microsoft.de . Ihr bekommt eine Website, also ist alles okay. Nun macht ne Kommandozeile auf und pingt den Server mal an


----------



## Einwegdose (11. Jul 2006)

Also so funzt es z.B.:


```
import java.io.*;
import java.net.*;

public class ServerTest {

 Socket s;
 String[] server = { "microsoft.com", "google.de", "g000000gl3.de", "opel.de", "sadg74g974g9723bg.de" };
 
  public void test() {
   for ( String serv : server ) {
    try {
     s = new Socket(serv,80);
     System.out.println("Der Server " + serv + " ist online !");
    } catch ( UnknownHostException uhe ) {
       System.out.println("Der Server " + serv + " ist down !");
      } catch ( IOException ioe ) { }
   }
  }

  public static void main(String[] args) {
   ServerTest st = new ServerTest();
   st.test();
  }
}
```


----------



## Leroy42 (11. Jul 2006)

AlArenal hat gesagt.:
			
		

> Nun macht ne Kommandozeile auf und pingt den Server mal an



Mal 'ne bescheidene Frage: Wie _pingt_ man einen Server eigentlich an? Von der Kommandozeile?


----------



## AlArenal (11. Jul 2006)

Leroy42 hat gesagt.:
			
		

> AlArenal hat gesagt.:
> 
> 
> 
> ...



ping [domainname|ip-adresse]


----------



## Leroy42 (11. Jul 2006)

:shock: Das gibt's ja auch unter Windows?

Ich dachte bisher, das wäre ausschließlich ein unix-Kommando.

Zumindest kannte ich es unter keiner DOS-Version.


----------



## AlArenal (11. Jul 2006)

Leroy42 hat gesagt.:
			
		

> :shock: Das gibt's ja auch unter Windows?
> 
> Ich dachte bisher, das wäre ausschließlich ein unix-Kommando.
> 
> Zumindest kannte ich es unter keiner DOS-Version.



Gabs unter DOS denn serienmäßig nen TCP/IP-Stack? Kann mich nicht entsinnen...


----------

