我正在尝试让我的Android 2.3.5手机列出我局域网上所有可能的Raspberry Pis(运行Raspbian)。 网络上还有其他设备,因此我认为在伪代码中执行此操作的方式是:
foreach ip 0..254
hn = gethostname("192.168.0." + ip);
if(hn == "rpi*") {
do_something();
}
我已成功设置RPi的主机名:
sudo hostname rpi0
我的路由器显示RPi已连接到192.168.0.4
。
我可以从Win7 PC中ping
IP地址192.168.0.4
,但我不能ping
主机名,或nslookup
IP或主机名。
当我在手机上的java中尝试下面的代码时,它声称它是可以访问的,但是获取主机名行返回的是ip地址而不是主机名,我认为如果它找不到主机名,它应该会这样做:
InetAddress inetAddress = InetAddress.getByAddress(ipAddress);
Log.d(TAG, inetAddress.isReachable(5000));
Log.d(TAG, inetAddress.getHostName());
有谁知道我做错了什么?这甚至是在LAN上寻找所有类型设备的理智方式吗?如果是这样,我相当确定我的机器方面是正确的,但我不太了解局域网。
PS抱歉,如果这个问题冗长而复杂,我想要包括我尝试过的所有内容。我也使用Virgin Superhub声称:
Software version "R36"
Hardware version 2.00
由于
答案 0 :(得分:3)
简而言之:您的DNS无法按预期运行 - 主机名rpi0
与IP地址192.168.0.4
之间没有任何关联。
这可能有很多原因,其中一个原因是,并非所有的家用路由器都保留了本地区域 - 如果你的路由器就是这种情况,那你只是运气不好。
如果您的路由器确实保留了本地区域,请确保您的PI使用正确的主机名运行其DHCP请求 - 您可以通过在设置主机名后断开/重新连接它们来执行此操作。