6

私は、MySQLデータベースからコンピューター名を抽出し、それらの名前を文字列配列リストに格納する簡単なプログラムを作成中です(この部分は正常に機能します)。その後、Stringをパラメーター(コンピューター名になります)として受け取り、pingを試行するクラスとメソッドを作成しました。そのクラスのコードは次のとおりです。

public class Ping 
{
public void pingHost(String hostName)
{   
    try
    {
        InetAddress inet = InetAddress.getByName(hostName);
        boolean status = inet.isReachable(5000);
        if (status)
        {
            System.out.println(inet.getHostName() + " Host Reached\t" + inet.getHostAddress());
        }
        else
        {
            System.out.println(inet.getHostName() + " Host Unreachable");
        }

    }
    catch (UnknownHostException e)
    {
        System.err.println(e.getMessage() + " Can't Reach Host");
    }
    catch (IOException e)
    {
        System.err.println(e.getMessage() + " Error in reaching the Host");
    }
}

UnknownHostException問題は、手動でpingを実行できる場合や、コンピューター名を「hostName」としてハードコーディングした場合でも、ほとんどのコンピューターでスローされ続けることです。

これが私のメインの外観です:

public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException 
{
    ArrayList <String> list = new ArrayList<String>();  
    MySQLConnect myConnection = new MySQLConnect();
    myConnection.importData(list);
    Ping pingComputer = new Ping();
    pingComputer.pingHost(list.get(87));            
}

現在、スローしているUnknownHostExceptionが手動でpingできる1台のコンピューターで実験しようとしています。なぜこれが起こっているのか誰かが知っていますか?

編集...

これをもう少し説明します。たとえば、mainで、これらのパラメータを次のパラメータに渡すと、次のようになりますpingHost

pingComputer.pingHost("ROOM-1234");

正常にpingを実行し、正しいホスト名/アドレスを返します。しかし、list.get(87)同じホスト名「ROOM-1234」を返しますが、スローしUnknownHostExceptionますか?これは私を本当に混乱させ、なぜそれが機能しないのかわかりません。

編集

うわー、ついにそれを理解しました。「ROOM-1234」のように文字列を直接渡したときにpingが機能していた理由は、空白がなく、配列から取得したため、list.get(87)同じものが返されましたが、チェックcharLengthすると、異なる値が返されました:)trim空白を取り除くために使用することになったばかりで、今ではうまく機能しています。

pingComputer.pingHost(list.get(87).trim());

すべての提案をありがとう!

4

1 に答える 1

-2

親愛なる実際に使用しているコードは、ホストが到達可能かどうかを確認することです。

次のクラスを使用して、windows pc を使用して ping メソッドを ping しますが、windows pc 以外の使用は到達可能です。

package com.utils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class Ping {

    public Boolean IsReachable(String ipaddress) {
        try {            
            final InetAddress host = InetAddress.getByName(ipaddress);

            try {
                return host.isReachable(3000);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return false;
    }

    public Boolean ping(String ipaddress) {
        Runtime runtime = Runtime.getRuntime();
        String cmds = "ping " + ipaddress;
        System.out.println(cmds);
        Process proc;

        try {
            proc = runtime.exec(cmds);
            proc.getOutputStream().close();
            InputStream inputstream = proc.getInputStream();
            InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
            BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
            String line;

            while ((line = bufferedreader.readLine()) != null) {
                if (line.contains("Reply from " + ipaddress + ":")) {
                    return true;
                }
            }
        } catch (IOException e) {

            e.printStackTrace();
        }
        return false;
    }
}

そして、以下のコードとして使用します

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    MySQLConnect myConnection = new MySQLConnect();
    myConnection.importData(list);
    Ping ping = new Ping();

    if (ping.ping(list.get(87)) {
        System.out.prinln("Online / Host is reachable");
    } else {
        System.out.prinln("Offline /Host is unreachable");
    }
}

ただし、コンピューター名で ping を実行するよりも、IP アドレスで ping を実行することをお勧めします。

于 2014-04-06T18:21:33.420 に答える