Używam InetAddress do sprawdzenia, czy mój serwer jest podłączony do sieci.JAVA Określanie portu za pomocą InetAddress
Jeśli serwer jest w trybie offline, zrestartuje serwer.
Ten proces jest przeprowadzany co 5 minut, aby sprawdzić ponownie, czy serwer jest podłączony do sieci.
To działa dobrze, ale teraz muszę dowiedzieć się, jak określić, że chcę użyć portu 43594 podczas sprawdzania stanu serwera zamiast portu domyślnego 80.
dzięki! Oto mój kod:
import java.net.InetAddress;
public class Test extends Thread {
public static void main(String args[]) {
try {
while (true) {
try
{
InetAddress address = InetAddress.getByName("cloudnine1999.no-ip.org");
boolean reachable = address.isReachable(10000);
if(reachable){
System.out.println("Online");
}
else{
System.out.println("Offline: Restarting Server...");
Runtime.getRuntime().exec("cmd /c start start.bat");
}
}
catch (Exception e)
{
e.printStackTrace();
}
Thread.sleep(5 * 60 * 1000);
}
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
EDIT:
Dobrze więc wziąłem czyjąś radą i zrobiłem go do tego. Ale teraz, kiedy odkomentowaniu tej linii .. Runtime.getRuntime().exec("cmd /c start start.bat");
otrzymuję ten błąd ..
error: unreported exception IOException; must be caught or declared to be thrown
To jest mój bieżący kod:
import java.net.*;
import java.io.*;
public class Test extends Thread {
public static void main(String args[]) {
try {
while (true) {
SocketAddress sockaddr = new InetSocketAddress("cloudnine1999.no-ip.org", 43594);
Socket socket = new Socket();
boolean online = true;
try {
socket.connect(sockaddr, 10000);
}
catch (IOException IOException) {
online = false;
}
if(!online){
System.out.println("OFFLINE: Restarting Server..");
//Runtime.getRuntime().exec("cmd /c start start.bat");
}
if(online){
System.out.println("ONLINE");
}
Thread.sleep(1 * 10000);
}
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Czy próbowałeś zmodyfikować parametr hosta tak, aby zawierał port? 'cloudnine1999.no-ip.org: 43594' – Vulcan
[Javadoc] (http://docs.oracle.com/javase/6/docs/api/java/net/InetAddress.html#isReachable%28int%29) mówi : 'Typowa implementacja użyje ŻĄDANIA ECHO ICMP, jeśli można uzyskać przywilej, w przeciwnym razie spróbuje ustanowić połączenie TCP na porcie 7 (Echo) hosta docelowego. '- czy jesteś pewien, że implementacja, której używasz, używa połączenia testowego na porcie 80? – fvu
@Vulcan Dzięki, ale spróbowałem. – Cloudnine1999