Hyper-V 可能抢占 59100 端口导致连接失败排查
如果你装了 Docker for Windows、WSL2、Hyper-V 任何一个组件,Windows 可能会抢占保留一段端口范围——AudioRelay 用的 59100 端口就在 Hyper-V 默认保留范围里。
现象
- AudioRelay 启动后托盘图标在,但手机永远连不上
netstat -ano | findstr "59100"可能显示端口被 Hyper-V 相关进程占用- AudioRelay 自己可能报端口占用错误或默默放弃监听 59100
怎么确认是 Hyper-V 的问题
管理员 PowerShell 跑:
netsh int ipv4 show excludedportrange protocol=tcp
如果输出里 59100 在某个排除范围里(比如 59000 - 59199),那就是 Hyper-V / Docker / WSL2 抢了。
修复方法
方法是让 Hyper-V 保留一段不包含 59100 的端口范围。
步骤 1:打开 Hyper-V 保留端口命令
管理员 PowerShell 跑:
net stop winnat
netsh int ipv4 add excludedportrange protocol=tcp startport=59200 numberofports=100
net start winnat
解释:把 Hyper-V 保留端口从 59000 段移到 59200 段,这样 59100 就空出来给 AudioRelay 了。
步骤 2:确认 AudioRelay 现在能用了
- AudioRelay PC 端重启
- 手机重新连
netstat -ano | findstr "59100"→ 应该能看到 AudioRelay 监听了
替代方案:禁用 Hyper-V 保留端口
如果你根本不用 Hyper-V / Docker / WSL2(或可以接受关掉它们),直接关掉 Windows 的 Hyper-V 组件就行:
- 控制面板 → 程序和功能 → 启用或关闭 Windows 功能
- 去掉「Hyper-V」和「适用于 Linux 的 Windows 子系统」的勾选
- 重启
重启后 Hyper-V 不再保留端口,AudioRelay 直接能用。
补充:Docker Desktop 的特殊情况
Docker Desktop for Windows 会自动启用 Hyper-V 或 WSL2 后端。如果你用 Docker 但又想用 AudioRelay,那就用上面「加排除端口范围」的方法——既保留 Docker 又给 AudioRelay 让路。
端口范围的注意事项
netsh int ipv4 add excludedportrange 设置的范围重启后会失效——Hyper-V 服务重启(每次开机)会重新占用默认范围。所以你可能需要:
- 把上面三条命令做成一个
.ps1脚本,放进「启动」文件夹,每次开机自动跑 - 或者用计划任务(Task Scheduler)在开机时触发
最简单的方式:新建一个文本文件叫 audiorelay-fix.ps1,内容就是那三条命令,然后创建一个计划任务让它在系统启动时以管理员权限运行。