我正在编写一个简单的程序,该程序从 MySQL 数据库中提取计算机名称,然后将这些名称存储到一个字符串数组列表中(这部分工作正常)。之后,我编写了一个类和一个将字符串作为参数(将是计算机名称)并尝试对其进行 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通的计算机。有人知道为什么会这样吗?
编辑...
只是为了多解释一点。例如在 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());
感谢所有的建议!