首页 > 解决方案 > Java - 发现 Raspberry Pi 主机名 - 适用于 Windows 但不适用于 Android

问题描述

你好 :) 我使用这个脚本来发现我网络上的主机名。当我在 Windows 上运行它时,它可以完美运行,让我可以看到我所有的活动设备,包括我的 Raspberry Pi 3 b+ Stretch(这是所需的目标)。

import java.io.IOException;
import java.net.InetAddress;

public class Main {
    public static void main(String[] args)
    {
        try {
            InetAddress inetAddress = InetAddress.getLocalHost();
            System.out.println("IP Address:- " + inetAddress.getHostAddress());
            System.out.println("Host Name:- " + inetAddress.getHostName());
            InetAddress ipd = InetAddress.getByName("10.0.0.1");
            byte[] ip = ipd.getAddress();
            for (int i = 1; i < 255; i++)
            {
                ip[3] = (byte)i;
                InetAddress address = InetAddress.getByAddress(ip);
                System.out.println(address);
                System.out.println(address.getHostName());
                if (address.getHostName().toLowerCase().contains("raspberry")) {
                    System.out.println("PI FOUND!!!");
                    System.out.println(address.getHostName());
                }
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }    }
}

但是,当我在两部 Android 手机(三星 J7 和诺基亚 6.1)中的任何一部上运行脚本时,我看不到网络上的任何设备,包括 Pi。

如果我直接从 Pi 运行脚本,它会识别为 127.0.0.1 的环回 localhost ip,然后在扫描我的网络 IP 时找不到自己。我相信这与 DNS 设置有关,但是当它使用相同的 DNS 服务器时,为什么它可以在我的 Windows PC 上工作?

一注:它适用于我的同事。他有完全相同的设置(相同的 Raspberry 模型、Raspbian 图像和电话)。

代码有问题吗?Android上有什么东西阻止它正常工作吗?我的猜测是它可能与我的路由器设置有关,但是为什么当我在 Windows 上运行它时它会起作用?

预先感谢您的任何帮助!

更新:我能够通过 Android Studio 运行科尔多瓦应用程序。我只设置它读取前 5 个 IP 地址(即 10.0.0.1 - 10.0.0.5)。Pi 在 10.0.0.5 上。这是目录:

2019-02-07 19:03:46.035 18008-18008/? E/Zygote: isWhitelistProcess - 进程被列入白名单 2019-02-07 19:03:46.036 18008-18008/? E/libpersona: scanKnoxPersonas 2019-02-07 19:03:46.036 18008-18008/? E/libpersona:无法打开文件 - /data/system/users/0/personalist.xml - 没有这样的文件或目录 2019-02-07 19:03:46.039 18008-18008/?W/SELinux:SELinux selinux_android_compute_policy_index:策略索引[2],Con:u:r:zygote:s0 RAM:SEPF_SAMSUNG-SM-J727A_8.1.0_0004,[-1 -1 -1 -1 0 1] 2019-02-07 19:03:46.040 18008-18008/? I/SELinux: SELinux: seaapp_context_lookup: seinfo=untrusted, level=s0:c512,c768, pkgname=io.cordova.hellocordova 2019-02-07 19:03:46.044 18008-18008/? I/zygote: 后期启用 -Xcheck:jni 2019-02-07 19:03:46.107 18008-18008/? D/TimaKeyStoreProvider:TimaKeyStore 未启用:无法添加 TimaSignature 服务和 generateKeyPair 服务 2019-02-07 19:03:46.108 18008-18008/?D/ActivityThread:添加了 TimaKeyStore 提供程序 2019-02-07 19:03:46.211 18008-18008/io.cordova.hellocordova I/CordovaLog:将日志级别更改为 DEBUG(3) 2019-02-07 19:03:46.211 18008- 18008/io.cordova.hellocordova I/CordovaActivity: Apache Cordova 原生平台版本 7.1.4 开始 2019-02-07 19:03:46.211 18008-18008/io.cordova.hellocordova D/CordovaActivity: CordovaActivity.onCreate() 2019 -02-07 19:03:46.232 18008-18008/io.cordova.hellocordova I/WebViewFactory: 加载 com.android.chrome 版本 71.0.3578.99 (code 357809902) 2019-02-07 19:03:46.295 18008-18008/ io.cordova.hellocordova I/cr_LibraryLoader:加载本机库的时间:7 毫秒(时间戳 2174-2181)2019-02-07 19:03:46.341 18008-18008/io.cordova。hellocordova D/SystemWebViewEngine:CordovaWebView 正在由以下厂商制造的设备上运行:samsung 2019-02-07 19:03:46.608 18008-18008/io.cordova.hellocordova D/PluginManager: init() 2019-02-07 19:03:46.617 18008-18008/io.cordova.hellocordova D/CordovaWebViewImpl: >>> loadUrl(file:///android_asset/www/index.html) 2019-02-07 19:03:46.629 18008-18060/io.cordova.hellocordova W/cr_media:需要 BLUETOOTH 权限 2019-02-07 19:03:46.631 18008-18008/io.cordova.hellocordova D/CordovaActivity:开始活动。2019-02-07 19:03:46.635 18008-18078/io.cordova.hellocordova I/zygote: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs::hasWideColorDisplay 检索到:0 2019-02-07 19:03 :46.639 18008-18008/io.cordova.hellocordova D/CordovaActivity: 恢复活动。2019-02-07 19:03:46.655 18008-18092/io.cordova。交换行为 2 2019-02-07 19:03:46.781 18008-18092/io.cordova.hellocordova D/libGLESv1: STS_GLApi : DTS, ODTC 不允许用于包 : io.cordova.hellocordova 2019-02-07 19:03 :46.783 18008-18092/io.cordova.hellocordova D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, egl_color_buffer_format *, EGLBoolean) 返回 0x3000, [720x1280]-format:1 201-9 -07 19:03:46.783 18008-18092/io.cordova.hellocordova D/OpenGLRenderer: eglCreateWindowSurface = 0xdd00c390, 0xc70e1808 2019-02-07 19:03:46.809 18008-18092/io.cordova.hellocordova D/vndk vendor/lib/hw/android.hardware.graphics.mapper@2.0-impl.so 来自当前命名空间而不是 sphal 命名空间。2019-02-07 19:03:46.827 18008-18078/io.cordova.hellocordova 带视频功能:hellocordova D/SystemWebChromeClient:file:///android_asset/www/main.12e606c81a2773901da4.js:第 1 行:null 2019-02-07 19:03:48.086 18008-18008/io.cordova.hellocordova I/chromium:[信息: CONSOLE(1)] "null",来源:file:///android_asset/www/main.12e606c81a2773901da4.js (1) 2019-02-07 19:03:48.473 18008-18121/io.cordova.hellocordova W/PluginManager : 线程警告:对 networkinterface.getWiFiIPAddress 的 exec() 调用阻塞了主线程 20 毫秒。插件应该使用 CordovaInterface.getThreadPool()。2019-02-07 19:03:48.483 18008-18121/io.cordova.hellocordova W/CordovaPlugin:尝试为 ID 发送第二个回调:networkinterface1017920643 结果是:“无效操作”2019-02-07 19:03:48.565 18008-18008/io.cordova.hellocordova D/ScrollView:initGoToTop 2019-02-07 19:03:48.583 18008-18008/io.cordova。hellocordova D/InputEventReceiver: channel '1942219 io.cordova.hellocordova/io.cordova.hellocordova.MainActivity (client)' ~ 处理输入事件接收器。2019-02-07 19:03:52.489 18008-18008/io.cordova.hellocordova D/InputEventReceiver:通道'1942219 io.cordova.hellocordova/io.cordova.hellocordova.MainActivity(客户端)'~NativeInputEventReceiver。2019-02-07 19:03:52.502 18008-18008/io.cordova.hellocordova D/InputTransport:输入通道被破坏:fd=144 2019-02-07 19:03:52.504 18008-18008/io.cordova.hellocordova D /SystemWebChromeClient:文件:///android_asset/www/main.12e606c81a2773901da4.js:第 1 行:/10.0.0.0 2019-02-07 19:03:52.505 18008-18008/io.cordova.hellocordova I/chromium:[INFO :CONSOLE(1)] "/10.0.0.0",来源:file:///android_asset/www/main.12e606c81a2773901da4。 http://10.0.0.0:3000 2019-02-07 19:03:52.506 18008-18008/io.cordova.hellocordova I/chromium: [INFO:CONSOLE(1)] " http://10.0.0.0:3000360 18008-18008/io.cordova.hellocordova V/InputMethodManager:开始输入:tba=android.view.inputmethod.EditorInfo@5fb2d05 nm:io.cordova.hellocordova ic=null 2019-02-07 19:04:22.360 18008- 18008/io.cordova.hellocordova D/InputMethodManager: startInputInner - Id: 0 2019-02-07 19:04:22.360 18008-18008/io.cordova.hellocordova I/InputMethodManager: startInputInner - mService.startInputOrWindowGainedFocus 2019-02-07 19 :04:22.362 18008-18008/io.cordova.hellocordova D/InputTransport:输入通道构造:fd=137 2019-02-07 19:04:22.362 18008-18008/io.cordova.hellocordova D/InputTransport:输入通道被破坏: fd=107 2019-02-07 19:04:22.736 18008-18008/io.cordova.hellocordova D/CordovaActivity: 暂停活动。2019-02-07 19:04:22.757 18008-18008/io.cordova.hellocordova D/CordovaActivity:停止活动。

标签: javaandroidraspberry-piraspberry-pi3

解决方案


推荐阅读