Android 127.0.0.1(环回)连接:在 WiFi 上工作,在 3G/4G 上失败

Posted

技术标签:

【中文标题】Android 127.0.0.1(环回)连接:在 WiFi 上工作,在 3G/4G 上失败【英文标题】:Android 127.0.0.1 (loopback) connection: Works on WiFi, fails with 3G/4G 【发布时间】:2015-08-13 06:31:28 【问题描述】:

我的应用程序嵌入了一个本地 http 服务器,可以通过 URL 处的环回设备访问该服务器:http://127.0.0.1:8080/

在启用 WiFi 的情况下也可以正常工作,在没有外部网络(没有 WiFi,没有 3G)的情况下也可以正常工作,但是在禁用 WiFi 并启用 3G 时会失败。

通过adb shell连接并执行“netcfg”可以看到loopback设备总是开启的:

shell@android:/ $ netcfg
...
lo       UP               127.0.0.1/8   0x00000049 00:00:00:00:00:00
...

Alos "ping 127.0.0.1" 在打开/关闭 WiFi 或 3G 时继续工作。

有什么想法吗?

更新: 增加谜题。从我的开发计算机我转发 tcp 端口:

$ adb forward tcp:8080 tcp:8080

然后我尝试使用http://127.0.0.1:8080/ 从我的电脑连接。它可以工作,但是当使用在 android 设备上运行的浏览器时它继续失败。

2015 年 6 月 1 日更新: 在使用 3G 时,我在 adb logcat 上看到很多类似的相关错误:

W/ContextImpl(  504): Calling a method in the system process without a qualified user: android.app.ContextImpl.sendStickyBroadcast:1239 com.android.server.TelephonyRegistry$3.onReceive:818 android.app.LoadedApk$ReceiverDispatcher$Args.run:788 android.os.Handler.handleCallback:725 android.os.Handler.dispatchMessage:92

E/CellLocation( 8336): create GsmCellLocation

触发 Gsm 活动连接到回送设备对我来说没有任何意义。

更新 2015-06-01 (2): 我设法安装 wget /data/data/com.XXXX.yyy/files/appFiles/bin

然后我通过“adb shell”->“run-as com.XXXX.yyy”连接,最后执行: wget -O - "http://127.0.0.1:8080/"

我工作正常,所以我可以丢弃任何在 localhost 上禁用环回访问的奇怪安全设置,所以我猜这与 WebView/WebViewClient 试图错误地使用 3G 外部代理来访问环回有关。现在我想知道是否可以禁用 WebView 上的代理。

【问题讨论】:

我不明白你在做什么。您是否尝试使用 Android 设备上的浏览器打开 PC 上托管的网站?另外,它是正版设备还是模拟器? @Squonk:实际上我尝试使用可以在本地访问的 Web 服务器(通过 Web 浏览器或 WebView)或外部 Web 浏览器。我正在开发一个真正的(正版)设备。 【参考方案1】:

最后,WebView 尝试访问外部代理似乎是一个问题,即使对于回溯界面也是如此。我按照以下建议的解决方案解决了这个问题:WebView android proxy

【讨论】:

请解释一下你到底设置了什么代理:端口?

以上是关于Android 127.0.0.1(环回)连接:在 WiFi 上工作,在 3G/4G 上失败的主要内容,如果未能解决你的问题,请参考以下文章

“谁告诉你环回地址就是127.0.0.1?” “老师就是这么说的。”

Linux中的0.0.0.0和 ::

linux上的环回接口地址是多少?

Java IPC w/Sockets - 使用环回设备

Windows安装Wireshark实现127.0.0.1抓包

从Android模拟器ping主机