使用websocket-sharp跨设备连接失败,Unity提示“非本地IP地址”求助
解决跨机器WebSocket连接的"Not a local IP address"问题
别担心,刚接触WebSocket遇到这类跨机器连接问题太正常了,完全不用不好意思~
首先,你猜测的防火墙/端口未开放确实是最常见的原因,但还有一个容易忽略的点需要先排查:
先确认服务器端的绑定地址
如果你的WebSocket服务器代码里绑定的是localhost(也就是IPAddress.Loopback),那它只会监听本地请求,外部机器根本连不上。你需要把服务器绑定到0.0.0.0(也就是IPAddress.Any),这样才能接收来自任意IP的连接。比如websocket-sharp的服务器初始化代码应该是:
var wssv = new WebSocketServer(IPAddress.Any, 你的端口号);
如果确认服务器绑定没问题,那接下来就需要检查防火墙是否开放了目标端口,下面分别说Mac和Linux的操作方法:
Mac上开放指定端口
方法1:通过系统图形界面(基于应用授权)
- 打开「系统偏好设置」→「安全性与隐私」→切换到「防火墙」标签页
- 点击左下角的锁图标,输入管理员密码解锁
- 点击「防火墙选项」,然后点击「添加」按钮
- 找到你的Unity客户端程序,添加进去并设置为「允许连接」,这样程序就能自由访问外部端口了
方法2:通过命令行(直接开放端口)
如果需要直接针对端口开放(而非特定应用),可以用pf防火墙规则:
- 打开终端,编辑pf配置文件:
sudo nano /etc/pf.conf - 在文件末尾添加一行规则(替换
你的端口号为实际使用的端口):pass in proto tcp from any to any port 你的端口号 - 按
Ctrl+O保存,Ctrl+X退出编辑器 - 加载新规则并启用pf(如果没开启的话):
sudo pfctl -f /etc/pf.conf sudo pfctl -e
Linux上开放指定端口
根据你的Linux发行版不同,操作略有区别:
对于Ubuntu/Debian(使用ufw防火墙)
- 先检查ufw的状态:
sudo ufw status - 开放目标TCP端口(WebSocket默认用TCP协议):
sudo ufw allow 你的端口号/tcp - 重启ufw使规则生效:
sudo ufw reload
对于CentOS/RHEL(使用firewalld防火墙)
- 先检查firewalld状态:
sudo firewall-cmd --state - 临时开放端口(重启后失效):
sudo firewall-cmd --add-port=你的端口号/tcp - 设置永久生效的规则:
sudo firewall-cmd --add-port=你的端口号/tcp --permanent - 重启防火墙加载新规则:
sudo firewall-cmd --reload
最后,你可以先用ping [Linux服务器IP]测试Mac和Linux的网络连通性,再用telnet [Linux服务器IP] 你的端口号或者nc -zv [Linux服务器IP] 你的端口号测试端口是否能正常访问,这样能快速定位问题所在~
内容的提问来源于stack exchange,提问作者Nutjuit
相关产品推荐
相关产品推荐

