我正在尝试使用Java在网络中连接远程PC名称和IP地址。我能够获得IP,但无法获取设备的名称。我附上代码供参考。
Java代码:
import java.io.IOException;
import java.net.InetAddress;
public class findIP {
public static void main(String[] args) throws IOException {
InetAddress localhost = InetAddress.getLocalHost();
// this code assumes IPv4 is used
byte[] ip = localhost.getAddress();
String N = localhost.getHostName();
for (int i = 1; i <= 254; i++)
{
ip[3] = (byte)i;
InetAddress address = InetAddress.getByAddress(ip);
InetAddress name = InetAddress.getByName(N);
if (address.isReachable(1000))
{
System.out.println(address+" " +"Device Name: "+name);
}
答案 0 :(得分:2)
首先,InetAddress.getByName(N)
正在尝试解析您的服务器主机名,而不是客户端。所以你的代码应该反映你的意图:
String name = address.getHostName();
现在回答您的问题,InetAddress.getHostName()
将返回相应IP地址的反向DNS查找结果。并非您的应用程序的所有客户端都有DNS记录,因此您可能无法看到“设备名称”。
答案 1 :(得分:1)
替换
InetAddress name = InetAddress.getByName(N);
与
String hostName = address.getHostName();
。
通过调用getByName
获得的是IP地址,而不是主机名。阅读docs。
答案 2 :(得分:1)
这应该
InetAddress host = InetAddress.getByName("xxx.xxx.xxx.xxx");
System.out.println(host.getHostName());