Stomp over WebSocket浏览器到实体安卓手机数据传输问题咨询
问题解答
你当前遇到的闪退核心原因有两个:一是10.0.2.2是安卓AVD虚拟机专属的宿主机映射地址,实体手机无法识别该地址,连接请求直接失败;二是你代码未做连接异常捕获,且Const类中address字段被声明为private外部无法访问,触发运行时异常导致闪退。
三个问题的明确答复
- 问题1:不需要改为手机IP,要替换为运行WebSocket服务端的电脑的局域网IP地址。你可以在电脑的网络设置里查看当前WiFi对应的IPv4地址,通常为
192.168.x.x格式,直接替换掉address里的10.0.2.2即可。 - 问题2:端口号无需调整,保持
8080即可,前提是你电脑上的Stomp服务端确实是监听8080端口。额外注意要打开电脑系统防火墙的8080端口入站权限,否则连接会被防火墙拦截。 - 问题3:当前你的电脑是WiFi内网、手机是4G公网的环境无法通信。如果服务端部署在本地电脑,必须让手机和电脑连接同一个WiFi,处于同一局域网下才能正常互通;如果需要手机用4G也能访问,需要把服务端部署到有公网IP的云服务器上,把address改成云服务器的公网IP即可。
代码修复建议
你提供的Const类中address字段被声明为private,外部的BroadcastActivity无法访问该字段,这也是崩溃的直接原因之一,要把修饰符改成public:
// 修改前 private static final String address = "ws://10.0.2.2:8080/im/websocket"; // 修改后,替换为你电脑的局域网IP public static final String address = "ws://192.168.xxx.xxx:8080/im/websocket";
另外建议给Stomp连接添加异常回调,捕获连接失败的情况避免直接闪退,也方便后续排查问题。
内容的提问来源于stack exchange,提问作者Joe Tan
相关产品推荐
相关产品推荐

