# Server anpingen (Pingzeit) ?? Pingzeit wird nicht verändert



## ltremix (7. Okt 2013)

Hallo zsm,

ich möchte ein Programm entwickeln, mit dem ich  alle halbe Std unsere Server anpingen kann.
Das Programm funktioniert eigentlich, nur das Problem ist, dass die Pingzeit immer gleich bleibt.


InetAddress.getByName(*server*).isReachable(*milisekunden*);


Die Pingzeit der Server wird nicht verändert, egal was ich für *milisekunden* einsetze.
Allerdings kann ich die Pingzeit von Internetseiten ändern, wie z.B. Google etc.
Nur die Pingzeit von den Server kann ich nicht verändern.

Was könnte das Problem sein und wie kann ich das Problem lösen?

Gruß

ltremix


----------



## ltremix (7. Okt 2013)

```
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class HalloWelt {

	public static String pingen(String server, int ms) throws UnknownHostException{
		Calendar cal = Calendar.getInstance();
		SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy || HH:mm:ss");
		String erg = null;

				try {
					InetAddress.getByName(server).isReachable(ms);
					erg = server + " ist erreichbar ( " + format.format(cal.getTime()) + " )\n";
					} catch (IOException e) {
						erg = server + " ist nicht erreichbar ( " + format.format(new Date()) + " )\n";
						

					}
				return erg;
	}
	
	public static void main(String[] args) {
		
		int ms = 4000; //4 Sekunden/
		String serv = "www.google.de";
		for(int j = 0;;){
	    	j = j + ms;
				try {
					System.out.println(InetAddress.getLocalHost().getHostName() + ": " + pingen(serv, j));
				} catch (UnknownHostException e) {
					e.printStackTrace();
				}
	    	j = j - ms;
	    }
		
	}
}
```


Google wird alle 4 Sekunden angepingt, aber wenn ich da den Servernamen eingebe, wird die Pingzeit nicht wahrgenommen, was ich eingebe.


----------



## JavaGott (7. Okt 2013)

Hä? :bahnhof:

isReachable(int timeout) 
Test whether that address is reachable.

Die Millisekunden die du angibst, ist ja nur der Timeout der für den Verbindungsversuch gesetzt wird.

Wenn dein Server im gleichen Segment steht, dann ist davon auszugehen, dass dein Ping <~1ms ist und somit ist es nahezu egal was du an Timeout angibst....



Bedeutet, du gibst da nicht die Zeit an wie oft ein Verbindungsversuch gemacht wird, sondern du gibst nur den timeout ein. Das Was du willst ist eher das:


```
for(int j = 0;;){

            j = j + ms;

                try {

                    System.out.println(InetAddress.getLocalHost().getHostName() + ": " + pingen(serv, j));
                    Thread.sleep(DEINE_ZEIT_ZWISCHEN_DEN_PINGS);
                } catch (UnknownHostException e) {

                    e.printStackTrace();

                }

            j = j - ms;

        }
```
Edit1:
Was mir grad auffällt, deine For schleife ist auch irgendwie seltsam :noe:
EDIT2:
Was anderes noch...
isReachable liefert True oder False zurück. Das solltest du abfragen in deinem Code, denn aktuell wird nur eine Exception gefangen.

Wenn isReachable false zurück liefert, dann ist das Zielsystem nicht erreichbar 


```
import java.io.IOException;

import java.net.InetAddress;

import java.net.UnknownHostException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

 

public class HalloWelt {

 

    public static String pingen(String server, int ms) throws UnknownHostException{

        Calendar cal = Calendar.getInstance();

        SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy || HH:mm:ss");

        String erg = null;
                try {

                    if(InetAddress.getByName(server).isReachable(ms))
                          erg = server + " ist erreichbar ( " + format.format(cal.getTime()) + " )\n";
                    else
                          erg = server + " ist nicht erreichbar ( " + format.format(new Date()) + " )\n";
                    } catch (IOException e) {
                        erg = server + " Adresse ist Müll!! ( " + format.format(new Date()) + " )\n";
                    }

                return erg;

    }

    

    public static void main(String[] args) {

        

        int ms = 4000; //4 Sekunden/

        String serv = "www.google.de";

        while(true){
                try {

                    System.out.println(InetAddress.getLocalHost().getHostName() + ": " + pingen(serv, 100));
                    Thread.sleep(ms);
                } catch (UnknownHostException e) {

                    e.printStackTrace();

                }
        }      

    }

}
```


----------



## ltremix (7. Okt 2013)

Das war die Lösung meines Problems.
Ich danke dir. Das hat mir sehr geholfen. :idea::idea::idea::idea:

Gruß

ltremix


----------



## JavaGott (7. Okt 2013)

Bitte meine Edits beachten. Denn dein isReachable ist auch noch Schrott.


----------



## ltremix (7. Okt 2013)

JavaGott hat gesagt.:


> Edit1:
> Was mir grad auffällt, deine For schleife ist auch irgendwie seltsam :noe:
> EDIT2:
> Was anderes noch...
> ...




For-Schleife war deswegen so seltsam, weil ich mir gedacht habe, dass isReachable der Abstand in Milisekunden ist =)


----------



## ltremix (7. Okt 2013)

JavaGott hat gesagt.:


> Bitte meine Edits beachten. Denn dein isReachable ist auch noch Schrott.



So, alles erledigt. Allerdings muss ich hier die Exception fangen, damit es funktioniert.

```
try {
						Thread.sleep(ms);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
```

Wieder mal was Neues gelernt.


----------

