260 lines
5.5 KiB
Markdown
260 lines
5.5 KiB
Markdown
|
|
# 网络连接问题解决方案
|
|||
|
|
|
|||
|
|
## 🔴 当前问题
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
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. **使用真机测试**
|
|||
|
|
- 模拟器网络配置复杂
|
|||
|
|
- 真机测试更准确
|