Android 浏览器无法连接到本地 nanohttpd 服务
Android browser can't connect to local nanohttpd service
我正在使用 WakefulBroadcastReceiver
方法将服务创建为 root
用于某些测试目的(请注意,我刚刚使用 Activity 启动服务器进行了测试,发生了同样的事情):
MyService.java
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "Server starting");
// Create the server
server = new WebServer(6666);
new Thread(new Runnable() {
@Override
public void run() {
try {
server.start();
} catch (IOException e) {
Log.d(TAG, e.getMessage());
}
}
}).start();
...
return START_STICKY;
}
WebServer.java :
public class WebServer extends NanoHTTPD {
@Override
public Response serve(IHTTPSession session) {
Log.d(TAG, "Serving");
return new NanoHTTPD.Response("<html><body>test</body></html>");
}
我 push
使用 adb
/system/app 中的 APK,因此无需先使用 activity 即可调用该服务。然后重启shell.
我可以看到等待连接的服务器日志,然后:
- 如果我使用
wget http://127.0.0.1:6666
使用 adb shell
我可以看到日志 "Serving".
- 如果我使用具有相同地址的设备浏览器(也尝试
localhost
),则无法访问服务器。
我使用 API18 和默认的 Nexus7 AVD(也尝试使用 Genymotion
和三星平板电脑)但没有任何效果。网络设置中没有配置代理。
我不明白为什么浏览器(在设备上)没有到达我在 127.0.0.1
上的 6666
端口(也在设备上)
这是清单:
<application android:allowBackup="true" android:label="@string/app_name"
android:icon="@mipmap/ic_launcher" android:theme="@style/AppTheme">
<service android:name=".MyService" android:label="Tool" android:enabled="true"/>
<receiver android:name=".receiver.BootCompleteReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我 运行 疯了,终于有人给我发了这个 link :
https://superuser.com/questions/188058/which-ports-are-considered-unsafe-on-chrome
端口6666被认为是不安全的...我希望它能写在页面上而不是无法到达服务器。
我正在使用 WakefulBroadcastReceiver
方法将服务创建为 root
用于某些测试目的(请注意,我刚刚使用 Activity 启动服务器进行了测试,发生了同样的事情):
MyService.java
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "Server starting");
// Create the server
server = new WebServer(6666);
new Thread(new Runnable() {
@Override
public void run() {
try {
server.start();
} catch (IOException e) {
Log.d(TAG, e.getMessage());
}
}
}).start();
...
return START_STICKY;
}
WebServer.java :
public class WebServer extends NanoHTTPD {
@Override
public Response serve(IHTTPSession session) {
Log.d(TAG, "Serving");
return new NanoHTTPD.Response("<html><body>test</body></html>");
}
我 push
使用 adb
/system/app 中的 APK,因此无需先使用 activity 即可调用该服务。然后重启shell.
我可以看到等待连接的服务器日志,然后:
- 如果我使用
wget http://127.0.0.1:6666
使用adb shell
我可以看到日志 "Serving". - 如果我使用具有相同地址的设备浏览器(也尝试
localhost
),则无法访问服务器。
我使用 API18 和默认的 Nexus7 AVD(也尝试使用 Genymotion
和三星平板电脑)但没有任何效果。网络设置中没有配置代理。
我不明白为什么浏览器(在设备上)没有到达我在 127.0.0.1
上的 6666
端口(也在设备上)
这是清单:
<application android:allowBackup="true" android:label="@string/app_name"
android:icon="@mipmap/ic_launcher" android:theme="@style/AppTheme">
<service android:name=".MyService" android:label="Tool" android:enabled="true"/>
<receiver android:name=".receiver.BootCompleteReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我 运行 疯了,终于有人给我发了这个 link : https://superuser.com/questions/188058/which-ports-are-considered-unsafe-on-chrome
端口6666被认为是不安全的...我希望它能写在页面上而不是无法到达服务器。