凌峰创科服务平台

游戏大厅和服务器的udp通讯不通

排查思路总纲:由简到繁,由内到外

我们将问题分为两大块:

游戏大厅和服务器的udp通讯不通-图1
(图片来源网络,侵删)
  1. 客户端:游戏大厅程序本身的问题。
  2. 服务器端:服务器程序和其网络环境的问题。

请按照以下步骤逐一排查,大概率能找到问题所在。


第一步:基础检查(最常见原因)

检查IP地址和端口号

这是最容易出错的地方,务必确认。

  • 客户端配置:游戏大厅中填写的服务器IP地址和端口号是否完全正确
    • IP地址:是公网IP还是局域网IP?如果是公网IP,服务器必须拥有公网IP。
    • 端口号:端口号是否在服务器程序中监听?是否与其他程序冲突?
  • 服务器配置:服务器程序启动时,绑定的IP和端口是否与客户端配置一致?
    • 绑定IP:服务器应该监听 0.0.0(表示监听所有网络接口)还是特定的内网IP(如 168.1.100)?
    • 重要:如果服务器在云主机(如阿里云、腾讯云)上,安全组规则必须放行这个UDP端口。

检查服务器程序是否正常运行

  • 端口监听:在服务器上,使用命令行工具检查程序是否真的在监听UDP端口。
    • Windows: 打开命令提示符,输入 netstat -anob | findstr "UDP",找到你配置的端口,检查其 State 是否为 LISTENING,以及对应的进程ID和程序名是否正确。
    • Linux: 打开终端,输入 sudo netstat -ulnp | grep <端口号>sudo ss -ulnp | grep <端口号>,检查 State 是否为 LISTEN,以及 PID/Program name 是否是你的服务器程序。

第二步:客户端问题排查

防火墙(Windows Defender / 杀毒软件)

客户端的防火墙可能会阻止游戏程序向外发送UDP数据包。

  • 排查方法
    1. 临时关闭:暂时关闭Windows Defender防火墙和第三方杀毒软件,然后测试连接,如果能连上,说明就是防火墙规则的问题。
    2. 添加规则:不要一直关闭防火墙,进入“控制面板” -> “Windows Defender 防火墙” -> “高级设置”,为你的游戏大厅程序(.exe文件)创建一个出站规则,允许其所有UDP通信。

网络环境(NAT/路由器)

如果你的客户端和服务器在不同的局域网内(比如你在家里,服务器在云上),你的家庭路由器会进行NAT(网络地址转换)。

游戏大厅和服务器的udp通讯不通-图2
(图片来源网络,侵删)
  • UPnP(通用即插即用)
    • 问题:路由器可能会阻止未经授权的端口映射,导致服务器无法主动发回数据包给你(UDP打洞失败)。
    • 解决:确保你的家庭路由器开启了UPnP功能,然后在游戏大厅的设置中,尝试开启“UPnP穿透”或“自动端口映射”选项,如果游戏支持,它会自动向路由器申请,将外部端口映射到你的内网电脑上。

本地网络问题

  • 排查方法
    1. 更换网络:如果你的手机能开热点,尝试将电脑连接到手机热点,然后测试游戏,如果连接成功,说明问题出在你原来的本地网络(比如路由器设置或运营商网络问题)。
    2. 禁用VPN/代理:确保你的电脑没有开启任何VPN或代理软件,它们会改变你的网络出口,导致IP地址和路由异常。

第三步:服务器端问题排查

这是最关键的一步,因为很多问题都出在服务器端。

云服务器安全组(重中之重)

如果你使用的是阿里云、腾讯云、AWS等云服务器,99%的UDP不通问题都是这里没配好

  • 检查点
    1. 登录你的云服务商控制台。
    2. 找到你的安全组设置。
    3. 检查入站规则,必须添加一条规则:
      • 授权对象0.0.0/0 (表示允许任何IP访问,生产环境不推荐,但排查时可用) 或者你的客户端IP。
      • 协议端口:选择 UDP,并填入你的游戏端口号。
      • 授权策略允许
  • 注意:安全组规则是云服务器的第一道防线,比系统自带的防火墙优先级更高。

服务器系统防火墙

即使安全组放行了,服务器操作系统自带的防火墙也可能拦截。

  • Linux (iptables / firewalld)
    • iptables (较老): sudo iptables -L -n -v 查看规则,sudo iptables -I INPUT -p udp --dport <端口号> -j ACCEPT 放行端口。
    • firewalld (CentOS 7+, Ubuntu新版本): sudo firewall-cmd --list-all 查看,sudo firewall-cmd --permanent --add-port=<端口号>/udp 添加规则,sudo firewall-cmd --reload 重新加载。
  • Windows Server
    • 打开“高级安全 Windows Defender 防火墙”。
    • 创建入站规则,允许UDP流量通过你指定的端口。

服务器程序绑定

服务器程序在启动时,必须正确地绑定到网络接口和端口。

游戏大厅和服务器的udp通讯不通-图3
(图片来源网络,侵删)
  • 常见错误:程序只绑定了 0.0.1(本地回环地址),这导致只有本机才能访问,服务器程序必须绑定到 0.0.0 才能接收来自任何外部IP的请求。

  • 代码示例(C++)

    // 错误示例:只绑定本地
    // bind(sock, (struct sockaddr*)&addr, sizeof(addr)); // addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    // 正确示例:绑定所有接口
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = htonl(INADDR_ANY); // 关键!INADDR_ANY 0.0.0.0
    addr.sin_port = htons(端口号);
    bind(sock, (struct sockaddr*)&addr, sizeof(addr));

第四步:进阶排查与工具

如果以上步骤都无法解决问题,说明问题可能更深层。

使用网络抓包工具(Wireshark)

这是定位网络问题的“终极武器”,可以让你看到数据包到底发生了什么。

  • 客户端抓包

    1. 在客户端电脑上安装Wireshark。
    2. 选择你正在使用的网卡(如以太网或WLAN)。
    3. 在显示过滤器中输入 udp.port == <你的端口号>,只显示相关的UDP包。
    4. 启动游戏大厅,尝试连接服务器。
    5. 观察结果
      • 看到客户端发送的包,但没看到服务器的回复:说明数据包发出去了,但服务器没回,问题在服务器端(防火墙、程序未响应等)。
      • 既看不到客户端的包,也看不到服务器的包:说明数据包根本没发出去,问题在客户端(防火墙、本地网络、程序Bug)。
      • 看到客户端的包,也看到服务器返回的包,但游戏大厅没收到:这可能是由于NAT问题,服务器返回的包被路由器丢弃了,这强烈暗示需要开启UPnP或进行手动端口映射。
  • 服务器抓包

    1. 在服务器上安装Wireshark。
    2. 选择服务器的公网网卡(如 eth0)。
    3. 同样使用过滤器 udp.port == <你的端口号>
    4. 启动游戏大厅连接。
    5. 观察结果
      • 看到了客户端发来的包,但没有回复包:说明服务器程序收到了请求,但代码逻辑有问题,没有正确生成和发送回复,检查你的服务器代码。
      • 什么包都没看到:说明客户端的包根本没到达服务器,100%是服务器防火墙(安全组或系统防火墙)的问题。

使用 telnetnc (netcat) 测试

这是一个简单的连通性测试,可以排除游戏程序的逻辑问题。

  • 从客户端测试服务器
    • 打开客户端的命令行。
    • 输入 telnet <服务器IP> <端口号>
    • 注意telnet 默认是TCP协议,对于UDP,这个测试不适用,但可以帮你判断IP和端口是否能被“访问到”,如果telnet超时,说明网络层面就不通。
  • 使用 nc (netcat) 测试UDP
    • 在服务器上启动一个UDP监听:nc -ul -p <端口号>
    • 在客户端上发送一个UDP包:echo "test" | nc -u <服务器IP> <端口号>
    • 如果服务器端能看到 "test" 字符串,说明UDP底层的通信是通的,问题出在你的游戏大厅代码逻辑上。

总结与行动计划

  1. 确认配置:核对客户端和服务器两端的IP、端口。
  2. 检查服务器安全组:云服务器玩家,第一步就检查这里!
  3. 检查系统防火墙:客户端和服务器都要检查。
  4. 客户端换网络/关VPN:排除本地网络问题。
  5. 服务器程序绑定:确保绑定的是 0.0.0
  6. 终极武器 - Wireshark抓包:分别从客户端和服务器抓包,根据现象定位问题。
  7. 简化测试 - nc 命令:用简单工具排除游戏代码逻辑问题。

按照这个流程,从最简单、最常见的原因开始排查,绝大多数UDP通讯不通的问题都能被解决,祝你成功!

分享:
扫描分享到社交APP
上一篇
下一篇