Android模拟器端口转发访问EmbedIO服务出现ERR_EMPTY_RESPONSE如何解决
解决方案
1. 修改Web服务监听地址
你当前代码绑定的是模拟器虚拟内网IP(10.0.2.16),而adb端口转发的流量默认发往模拟器回环地址(127.0.0.1),二者不匹配导致服务无法接收请求,返回空响应。
将App.OnStart方法中Web服务启动地址改为监听所有网卡:
// 替换原有的var url = $"http://{localIPAddress}:8080"; 行 var url = "http://0.0.0.0:8080";
0.0.0.0代表监听设备所有网卡的8080端口,可同时兼容adb转发流量、模拟器内部访问、局域网访问三种场景。
2. 补充Android权限配置
在Android项目的AndroidManifest.xml中添加必要网络权限,同时开启明文流量支持:
<manifest ...> <!-- 添加网络权限 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application ... <!-- 允许明文HTTP请求,Android 9+ 默认禁用 --> android:usesCleartextTraffic="true"> ... </application> </manifest>
3. 验证端口转发规则
执行命令adb forward --list确认转发规则存在,正常输出应包含tcp:8080 tcp:8080,如果规则不存在重新执行:adb forward tcp:8080 tcp:8080
4. 修复接口响应异常
你当前的ChangeBackGround接口返回值为void,部分版本EmbedIO对无返回值的GET请求会出现响应头构造异常,可修改为明确返回值:
[Route(HttpVerbs.Get, "/ChangeBackGround")] public async Task<bool> ChangeBackGround() { Device.BeginInvokeOnMainThread(() => { App.Current.MainPage.BackgroundColor = Color.Green; }); return true; }
完成以上修改后重启应用和adb转发规则,再次访问http://localhost:8080/api/ChangeBackGround即可正常响应。
内容的提问来源于stack exchange,提问作者Sach K
相关产品推荐
相关产品推荐

