# 网络连接问题解决方案 ## 🔴 当前问题 ``` request:fail abort statusCode:-1 failed to connect to /192.168.1.141:30101 ``` 手机无法连接到服务器,这是网络配置问题,不是代码问题。 ## ✅ 快速检查清单 ### 1. 确认手机和电脑在同一个 WiFi **电脑端:** ```cmd ipconfig ``` 查找 `无线局域网适配器 WLAN` 的 IPv4 地址,例如: ``` IPv4 地址 . . . . . . . . . . . . : 192.168.1.141 ``` **手机端:** - 打开 WiFi 设置 - 点击已连接的 WiFi - 查看 IP 地址(应该是 192.168.1.x) ❌ 如果手机 IP 不是 192.168.1.x,说明不在同一个网络! ### 2. 测试服务器是否可访问 **在手机浏览器中访问:** ``` http://192.168.1.141:30101/docs ``` ✅ 如果能打开 API 文档页面 → 网络正常,继续下一步 ❌ 如果无法打开 → 网络问题,继续排查 ### 3. 检查防火墙 **方法 1:添加防火墙规则(推荐)** 1. 按 `Win + R`,输入 `wf.msc`,回车 2. 点击左侧"入站规则" 3. 点击右侧"新建规则" 4. 选择"端口" → 下一步 5. 选择 TCP,输入 `30100,30101` → 下一步 6. 选择"允许连接" → 下一步 7. 全部勾选(域、专用、公用)→ 下一步 8. 名称输入"Python 服务器" → 完成 **方法 2:临时关闭防火墙测试** 以管理员身份运行 PowerShell: ```powershell # 关闭防火墙 netsh advfirewall set allprofiles state off # 测试完成后重新开启 netsh advfirewall set allprofiles state on ``` ### 4. 检查服务器是否正在运行 确认服务器日志中有: ``` Uvicorn running on http://0.0.0.0:30101 Application startup complete. ``` ✅ 如果看到这些日志 → 服务器正常运行 ❌ 如果没有 → 重启服务器 ### 5. 检查端口是否被占用 ```cmd netstat -ano | findstr :30101 ``` 应该看到: ``` TCP 0.0.0.0:30101 0.0.0.0:0 LISTENING [进程ID] ``` ## 🔧 常见问题解决 ### 问题 1:IP 地址变了 **症状:** - 之前能连接,现在不能了 - 电脑重启后无法连接 **解决:** 1. 在电脑上运行 `ipconfig` 查看新的 IP 地址 2. 更新 `xuniYou/utils/request.js` 中的 IP 地址: ```javascript export const baseURL = 'http://新IP:30100' export const baseURLPy = 'http://新IP:30101' ``` 3. 重新编译 App **或者设置静态 IP(推荐):** 1. 打开"控制面板" → "网络和共享中心" 2. 点击当前连接的网络 3. 点击"属性" → "Internet 协议版本 4 (TCP/IPv4)" → "属性" 4. 选择"使用下面的 IP 地址": - IP 地址:192.168.1.141 - 子网掩码:255.255.255.0 - 默认网关:192.168.1.1 - 首选 DNS:192.168.1.1 ### 问题 2:手机连接的是移动数据 **症状:** - 手机显示 4G/5G 图标 - 或者连接的是不同的 WiFi **解决:** 1. 关闭手机移动数据 2. 连接到与电脑相同的 WiFi 3. 重新测试 ### 问题 3:路由器 AP 隔离 **症状:** - 手机和电脑在同一个 WiFi - 但是无法互相访问 **解决:** 1. 登录路由器管理页面(通常是 192.168.1.1) 2. 查找"AP 隔离"或"无线隔离"设置 3. 关闭 AP 隔离功能 4. 重启路由器 ### 问题 4:Windows 网络配置 **症状:** - 防火墙已关闭 - 但还是无法连接 **解决:** 检查网络配置文件类型: 1. 打开"设置" → "网络和 Internet" → "状态" 2. 点击"属性" 3. 确保网络配置文件是"专用"而不是"公用" ## 🧪 完整测试流程 ### 步骤 1:测试电脑本地访问 在电脑浏览器中访问: ``` http://127.0.0.1:30101/docs ``` ✅ 能打开 → 服务器正常 ❌ 不能打开 → 服务器问题,检查服务器日志 ### 步骤 2:测试局域网访问 在电脑浏览器中访问: ``` http://192.168.1.141:30101/docs ``` ✅ 能打开 → 网络配置正常 ❌ 不能打开 → 防火墙或网络配置问题 ### 步骤 3:测试手机访问 在手机浏览器中访问: ``` http://192.168.1.141:30101/docs ``` ✅ 能打开 → 网络连接正常,可以测试 App ❌ 不能打开 → 手机网络问题 ### 步骤 4:测试 App 连接 打开 App,观察日志: ``` WebSocket URL: ws://192.168.1.141:30101/voice/call WebSocket onOpen: [Object] {} ``` ✅ 看到 onOpen → 连接成功 ❌ 看到 fail → 还有问题 ## 📝 推荐配置 ### 开发环境最佳实践 1. **设置电脑静态 IP** - 避免 IP 地址变化 - 固定为 192.168.1.141 2. **配置防火墙规则** - 允许端口 30100 和 30101 - 不要完全关闭防火墙 3. **使用专用网络配置文件** - 在 Windows 网络设置中选择"专用" - 避免公用网络的限制 4. **关闭 AP 隔离** - 在路由器设置中关闭 - 允许设备间通信 ## 🚀 解决后的测试 网络连接正常后,重新测试语音通话功能: 1. 打开 App 2. 进入语音通话页面 3. 按住"按住说话" 4. 说话 3-5 秒 5. 松开按钮 观察日志: ``` ✅ 开始说话 📤 发送 ptt_on 信号 📋 收到服务器消息: {"type":"info","msg":"ptt_enabled"} ⏹️ 录音已停止 📁 转换后的绝对路径: xxx ✅ 文件读取成功 📦 开始分片发送 ``` ## ⚠️ 注意事项 1. **不要在公共 WiFi 测试** - 公共 WiFi 通常有 AP 隔离 - 设备间无法互相访问 2. **确保服务器一直运行** - 不要关闭服务器窗口 - 观察服务器日志 3. **手机不要锁屏** - 锁屏可能断开 WiFi - 保持屏幕常亮 4. **使用真机测试** - 模拟器网络配置复杂 - 真机测试更准确