React Native WebSocket连接报无法解析主机错误排查求助
不同环境下的WebSocket连接示例
NodeJS 环境
const WebSocket = require('ws'); const ws = new WebSocket('wss://siteurl'); ws.on('open', function open() { ws.send(''); }); ws.on('message', function incoming(message) { console.log(message); });
React Native 环境
let connection = new WebSocket('wss://siteurl'); connection.onopen = () => { connection.send(''); }; connection.onmessage = ((event) => { console.log(event); }); connection.onerror = (event) => { console.log(event); }
浏览器环境
const socket = new WebSocket('wss://siteurl'); socket.onopen = () => { console.log('Socket connected!'); socket.send(''); } socket.onmessage = (message) => { console.log(`Message:\n`, message.data); }
报错原因说明
上述代码在NodeJS、浏览器环境均运行正常,但React Native代码在Android Studio模拟器中通过npm run android运行时返回「Unable to resolve host」错误,可能原因如下:
- 后端地址指向错误:如果连接的是本地开发环境的服务,填写
localhost会指向Android模拟器本身,而非运行后端服务的开发主机,需将地址改为模拟器默认指向开发机的特殊IP10.0.2.2,端口需同步保留。 - 缺少网络权限:Android应用默认没有网络访问权限,需要在项目
android/app/src/main/AndroidManifest.xml文件的manifest标签下添加网络权限声明:<uses-permission android:name="android.permission.INTERNET" /> - 模拟器网络异常:检查模拟器是否正常联网,可打开模拟器内置浏览器访问公网地址验证,如果网络断开,重连模拟器网络或重启模拟器即可。
- 主机名解析失败:如果使用的是自定义私有域名,开发机的hosts文件配置了域名映射但模拟器没有同步配置,会导致解析失败;如果是公网域名,可检查模拟器的DNS配置是否正常,必要时可更换模拟器DNS为公共DNS(比如8.8.8.8)。
- 代理配置冲突:如果模拟器设置了不可用的代理,会导致域名解析失败,可检查模拟器的代理配置,关闭无用代理后重试。
- 地址拼写错误:检查WebSocket连接的URL是否有拼写错误、多余空格、协议头错误等问题。
内容的提问来源于stack exchange,提问作者utf_8
相关产品推荐
相关产品推荐

