私はInetAddressを使用して自分のサーバーがオンラインかどうかを判断しています。JAVA InetAddressでポートを指定する
サーバーがオフラインの場合、サーバーを再起動します。
このプロセスは、サーバーがオンラインであるかどうかを再度確認するために5分ごとにループします。
それが正常に動作しますが、今、私が代わりにデフォルトのポート80
感謝のサーバーの状態をチェックするとき、私は、ポート43594を使用することを指定する方法を見つけ出す必要があります!ここに私のコードです:
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();
}
}
}
編集:私は、誰かのアドバイスを取り、私はこれにそれを作ったので、
わかりました。私はすでにコメントで述べたように
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();
}
}
}
のために処理し、例外:)(クローズが
EDIT3を投げることができるというのIOExceptionの取り扱いを追加しましたポートを含めるためにホストパラメータを変更しようとしましたか? 'cloudnine1999.no-ip.org:43594' – Vulcan
[Javadoc](http://docs.oracle.com/javase/6/docs/api/java/net/InetAddress.html#isReachable%28int%29)によれば、 : '典型的な実装は特権が得られればICMP ECHO REQUESTを使用し、そうでなければ、宛先ホストのポート7(Echo)にTCP接続を確立しようとします。 ' - 使用している実装がポート80で実際にテスト接続を使用していることは確かですか? – fvu
@ Vulcanありがとうございましたが、私はそれを試みました。 – Cloudnine1999