> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 游戏网状通信：GDK 与 XDK 的差异

> Microsoft 游戏开发工具包与 XBOX One Software Development Kit 中游戏网状通信的差异

Secure Sockets 和 XBOX Integrated Multiplayer (XIM) 在 Microsoft 游戏开发工具包 (GDK) 中不再可用。取而代之，Microsoft 游戏开发工具包 (GDK) 游戏可以使用以下替代方案。

* Azure PlayFab Party
  对于客户端间通信，建议游戏使用 [PlayFab Party](/build/console-features/networking/game-mesh/playfab-party-intro-networking) API。它们提供与 XBOX One Software Development Kit 中 Secure Sockets 类似的功能，同时提供安全通信、通过通信中继实现的网络地址转换 (NAT) 穿越，以及语音和文字聊天功能。
* Datagram Transport Layer Security (DTLS)
  游戏也可以选择使用 DTLS 加密其数据包有效负载。可通过 `OpenSSL` 或 `Bcrypt` API 实现，或使用封装了此类实现的中间件。无论内容如何，所有通信都必须由游戏服务进行加密和身份认证。有关此方案的具体要求，请参阅 [面向 Microsoft 游戏开发工具包游戏的安全游戏通信](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/game-principles/security/communication-security/communication-security-impl/gc-secure-communication-impl)。

## Microsoft 游戏开发工具包 (GDK) 与 XBOX One Software Development Kit 游戏版本之间的游戏通信

建议游戏在所有 XBOX 主机硬件上使用 GDK。这样可以采用统一的网络实现。在某些场景下，游戏可能仍希望支持 XBOX One Software Development Kit 与 GDK 游戏版本之间的网络通信。

在这种场景下，XBOX One Software Development Kit 游戏无法使用 Secure Sockets API，因为它们与 GDK 中的 Azure PlayFab Party API 网络不兼容。在 Secure Socket 功能之上构建的 XIM API 同样如此。

在 XBOX One Software Development Kit 游戏版本中使用了 Secure Sockets 或 XIM 的游戏，必须将游戏的网络堆栈更新为 Azure PlayFab Party 或 DTLS 通信。我们推荐将 Azure PlayFab Party 作为所有客户端间通信的解决方案。Azure PlayFab Party 还简化了语音和文字聊天功能。

在 XBOX One Software Development Kit 游戏版本中使用专用服务器或中继服务器的游戏，也可以同样地实现与 GDK 游戏版本的网络通信。所有通信协议应始终经过身份认证、加密，并遵循安全最佳实践。

## 网络初始化

在 Microsoft 游戏开发工具包 (GDK) 中，游戏会在 Game OS 启动过程中尽可能早地启动。你可以开始从硬盘加载资源并开始初始化图形堆栈。这意味着你的代码在网络服务尚未启动时就在运行，因此在一段时间内使用 Win32 网络 API 是不安全的。我们将此时间段定义为 *网络初始化* 期，之后网络被视为已初始化。网络初始化通常需要几秒钟，这在你的代码中可能会非常明显。

在 XBOX One ERA 游戏中，网络初始化会隐式且任意地阻塞本应实时安全的网络 API，例如 `WSAStartup` 或 `bind`。在 Microsoft 游戏开发工具包 (GDK) 中，网络初始化现在是一个显式概念，你必须与之交互才能使用任何 Win32 网络或安全 API。

Microsoft 游戏开发工具包 (GDK) 游戏必须等待 `XNetworkingConnectivityHint::networkInitialized` 布尔值被设为 `true` 后，再调用 `Winsock`、`WinHTTP`、`IP Helper`、`BCrypt`、`WinCrypt`、`Schannel` 或任何其他 Win32 网络 API。在网络初始化完成前调用其中任一 API 会导致不确定的行为，甚至可能出现随机的进程崩溃。

此外，同样的概念适用于所有挂起/恢复周期。挂起时，Microsoft 游戏开发工具包 (GDK) 游戏应关闭所有网络和安全句柄。从网络角度看，Microsoft 游戏开发工具包 (GDK) 游戏应像初次启动一样处理恢复处理程序，再次等待网络完成初始化。

有关等待网络初始化的代码示例等更多信息，请参阅 [网络初始化与连接性](/build/console-features/networking/initialization-connectivity-networking)。

## 端口行为

在 XBOX One ERA 游戏中，你需要在网络清单中预先定义游戏进行的每一个套接字流。在 Microsoft 游戏开发工具包 (GDK) 中，该清单已被移除。XBOX One 主机上的端口现在与 Windows PC 上的行为一致——你可以在任意端口上调用 `bind`，该端口允许所有出站以及应邀入站的 TCP 与 UDP 流量。未经请求的入站 UDP 与 TCP 流量将被阻止。这意味着不再允许 TCP 点对点网络拓扑。Microsoft 游戏开发工具包 (GDK) 游戏应对其游戏流量使用 UDP。

Microsoft 游戏开发工具包 (GDK) 游戏现在还可以直接访问首选本地 UDP 多人游戏端口。这个端口是平台可提供的、连接对等方和服务器的最佳端口，因为它有故障排查支持与用户配置支持。我们强烈建议将多人游戏与语音流量调整为使用此端口，以提升整体连接成功率。

有关端口行为的更多详细信息，请参阅 [XBOX 主机端口行为](/build/console-features/networking/game-mesh/xbox-console-port-behavior) 和 [首选 UDP 多人游戏端口](/build/console-features/networking/game-mesh/preferred-local-udp-multiplayer-port-networking)。

## 另请参阅

[网络初始化与连接性](/build/console-features/networking/initialization-connectivity-networking)

[面向 Microsoft 游戏开发工具包游戏的安全游戏通信](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/game-principles/security/communication-security/communication-security-impl/gc-secure-communication-impl).

[HTTP 与 Web sockets](/build/console-features/networking/web-requests/http-networking)

[Windows sockets](/build/console-features/networking/game-mesh/winsock-intro-networking)

[Game Chat 2 简介](/services/xbox-services/multiplayer/chat/game-chat2/game-chat-2-intro)

[Azure PlayFab Party](/build/console-features/networking/game-mesh/playfab-party-intro-networking)

[XBOX Live API 入门](/services/xbox-services/fundamentals/xbox-services-api/live-gs-xbl-apis)

[http\_call\_c](/reference/live/xsapi-c/http_call_c/http_call_c_members)

[首选 UDP 多人游戏端口](/build/console-features/networking/game-mesh/preferred-local-udp-multiplayer-port-networking)
