Android:获取局域网中服务器名称的IP地址

3

有人知道如何使用服务器名称查找服务器的IP地址吗? 我尝试了以下内容:

InetAddress[] addresses =  InetAddress.getAllByName(serverName);

并且

InetAddress address = InetAddress.getByName(serverName);

如果服务器名称是本地连接的服务器名称(例如服务器名称“TestServer”),则两者都会抛出 UnknownHostException。但是,如果我传入:www.google.com,它可以工作!只有在尝试使用服务器名称查找连接的服务器(即本地连接)时才会失败。

有任何想法吗?

谢谢。


注意:我已在AndroidManifest.xml中设置了权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

可以使用 InetAddress localhost = InetAddress.getLocalHost(); 方法。 - debo.stackoverflow
嗨Debo,如果我错了,请纠正我,但我认为InetAddress.getLocalHost();只是获取当前设备信息?我需要获取服务器IP。例如,我正在使用手机,并且想要获取名为"TestServer"的Windows计算机的IP地址。类似于在Windows机器上执行ping TestServer,它可以找到其他计算机的IP地址。 - Sam
你需要那个IP地址做什么? - greenapps
展示 serverName 变量中的内容。 - Vladyslav Matviienko
“TestServer” 可能不是网络(DNS)所知道的内容。 “InetAddress.getByName” 查询 DNS 服务器,以通过 DNS 名称提供服务器的 IP。 因此,您的 DNS 中是否将服务器写为“TestServer”? - Vladyslav Matviienko
显示剩余9条评论
1个回答

0
尝试这段代码:
InetAddress addr = InetAddress.getByName("ServerName");
String serverName= addr.getHostName();
Log.e("ServerName",serverName);

你必须像这样在你的设备中设置网络 DNS

enter image description here

或者通过编程设置:

添加权限:

<uses-permission android:name="android.permission.WRITE_SETTINGS"/>

更改 DNS:

android.provider.Settings.System.putString(getContentResolver(), android.provider.Settings.System.WIFI_STATIC_DNS1, "192.168.0.5");
android.provider.Settings.System.putString(getContentResolver(), android.provider.Settings.System.WIFI_STATIC_DNS2, "192.168.0.2");

嗨,Ahmad,我需要相反的方式。我需要获取特定计算机的IP地址。例如***InetAddress.getByName("TestServer");***,但它不起作用。 - Sam
嗨,Ahmad,你从哪里获取DNS1和DNS2的值?我使用了我的服务器值,即192.168.1.1,并且我只有一个IP用于两个DNS。我尝试过了,但它仍然失败了... - Sam
嗯...我想知道这是否是防火墙问题。但是使用C#代码获取IP地址可以正常工作。让我进一步调查并回复你。非常感谢! - Sam
嗨@Sam,你解决这个问题了吗?谢谢! - Roberto Alarcon
没有,我还没有找到解决方案 :( - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接