- 阻塞式: XNetworkingQueryPreferredLocalUdpMultiplayerPort
- 异步式: XNetworkingQueryPreferredLocalUdpMultiplayerPortAsync
- 通知式: XNetworkingRegisterPreferredLocalUdpMultiplayerPortChanged
INADDR_ANY/in6addr_any 地址。
处理套接字失败
不保证返回的端口一定能与特定服务器或对等方成功建立套接字连接。应执行常规的游戏重试和回退逻辑。每当套接字关闭并重新打开时,游戏都应重新查询最近的首选本地 UDP 多人游戏端口,因为端口可能随时间变化。网络初始化
XNetworkingQueryPreferredLocalUdpMultiplayerPort API 的三种方式(阻塞、异步和通知式)在游戏启动和恢复时都会阻塞或延迟完成/通知,直到网络完成初始化。你可以按 检测网络初始化状态 中的概述单独等待网络初始化,也可以调用这些 API 并等待其返回。
挂起与恢复
与任何其他套接字一样,绑定到首选本地 UDP 多人游戏端口的套接字应在挂起时关闭,并在恢复时等待网络初始化完成后重新创建。你应通过RegisterAppStateChangeNotification 注册挂起与恢复事件。在恢复时,应假定首选本地 UDP 多人游戏端口可能已变更,因此要么监听首选本地 UDP 多人游戏端口的变化,要么在创建新套接字时重新查询。有关 WinSock 挂起与恢复处理的更多信息,请参阅 Winsock 中的挂起与恢复。
首选本地 UDP 多人游戏端口的变更
游戏可以使用 XNetworkingRegisterPreferredLocalUdpMultiplayerPortChanged API 监听首选本地 UDP 多人游戏端口的变化。 系统会尽力确保在游戏运行期间首选本地 UDP 多人游戏端口不发生变化。但在某些不可避免的情况下,由于用户的外部网络条件发生变化,导致现有套接字流失效时,端口会发生变化。当 网络连接级别 变化时或作为游戏挂起/恢复周期的一部分时,端口尤其容易变化。 首选本地 UDP 多人游戏端口变化时,来自未来对等方的额外入站连接可能会在之前的任何首选端口上被阻止。这可能不会在套接字层导致失败。但是游戏最终可能无法在绑定到之前任何首选端口的任何套接字上接收数据包。 与现有对等方之间发送和接收的数据包可能继续正常工作。首选本地 UDP 多人游戏端口变化的通知对任何正在进行的游戏会话未必是致命的。 发生变化通知时,游戏应迁移到绑定在新首选端口上的新套接字。此迁移应尽早进行,且不应中断任何现有玩法。要检测连接丢失并重试套接字连接,游戏应始终使用最新的首选端口。测试首选本地 UDP 多人游戏端口的更改
按以下步骤更改首选本地 UDP 多人游戏端口。- 在游戏运行时,打开 XBOX Guide。转到 Settings 应用。
- 在 General 选项卡上,选择 Network settings。
- 选择 Advanced settings,然后选择 Alternate port selection。
- 将端口选择设置为 Manual。使用下拉菜单选择端口。
- 端口选择立即生效,并向游戏发送相应通知。
- 测试完成后,将端口选择设置回 Automatic,使端口行为恢复默认。
当进入 Settings 应用时,游戏受到约束但仍在运行,即使你的游戏不可见,也会立即收到端口变更通知。如果你打开 Settings 应用超过 10 分钟未切换回游戏,游戏将被挂起。
安全性
绑定到首选本地 UDP 多人游戏端口的套接字的行为与任何其他套接字完全相同。特别是,此套接字并不会提供任何额外的安全性。游戏应按通信安全最佳实践在绑定到首选本地 UDP 多人游戏端口的套接字之上使用自己的安全通信协议。有关更多信息,请参阅 通信安全概述 (NDA 主题)。点对点
首选本地 UDP 多人游戏端口提供了构建点对点网络最好的已知端口。它以最佳方式配置,允许通过用户的 NAT 层的入站连接。但游戏仍负责执行 NAT 穿越,包括以下内容。- 检测 NAT 类型
- 检测并交换设备的公共 IP 地址与端口
- NAT 打洞与穿越
