> ## 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.

# PC 端口行为

> PC 端口行为

本主题介绍 PC 端口的行为。

## 端口规则

* 当用户使用内置的默认 Windows 防火墙时，PC 端口允许所有出站 TCP (传输控制协议) 与 UDP (用户数据报协议) 流量，但会阻止未经请求的入站 TCP 与 UDP 数据包。

* 首选本地 UDP 多人游戏端口的行为与其他端口相同，但允许未经请求的入站 UDP 数据包。不能使用 TCP。

* 出站流始终有效，你无需为此声明任何属性。当用户向远程服务器/设备发送第一个数据包后，来自该设备的后续入站数据包无论如何都会被送达。

* 对于 Microsoft 游戏开发工具包 (GDK) 游戏中的点对点通信，你应在首选多人游戏端口上使用 UDP。此外，必须进行防火墙与 NAT 打洞。除非用户对游戏进行例外设置，否则未经请求的入站 TCP 数据包会被阻止。未经请求的入站 UDP 数据包默认也会被阻止，需要用户设置例外或某种形式的防火墙打洞才能疏通 UDP 点对点流。

* 游戏的例外设置既可以由用户通过防火墙设置添加，也可以在打包过程中通过声明特定属性来设置。用户的防火墙设置以及游戏包属性共同决定了未经请求的入站数据包的实际行为。

* 需要注意的是，PC 用户可能使用第三方防火墙。这些设置会影响端口的整体行为。详细内容见下文。

**提示**：[PlayFab Party](/build/console-features/networking/game-mesh/playfab-party-intro-networking) 提供了自动处理此功能的点对点网络拓扑。或者，你也可以以 [STUN](https://tools.ietf.org/html/rfc5389) 和 [ICE](https://tools.ietf.org/html/rfc8445) 的 RFC 作为自行实现的起点。

## 未经请求的入站流量管理

使用 GDK 创建的 PC 游戏以 MSIXVC 包形式发布。

当游戏作为 MSIXVC 包发布时，你可以通过在 **MicrosoftGame.config** 文件中声明诸如 [privateNetworkClientServer](https://learn.microsoft.com/uwp/schemas/appxpackage/uapmanifestschema/element-capability) 或 [internetClientServer](https://learn.microsoft.com/uwp/schemas/appxpackage/uapmanifestschema/element-capability) 之类的属性，来声明如何处理未经请求的入站流量。

**重要：** 由于用户防火墙及其设置，这些属性可能实际上不起作用。有关详细信息，请参阅 [防火墙及其对流量的影响](#firewall-and-how-it-affects-traffic)。

下表列出了各属性如何影响未经请求的入站流量访问，以及预期的用户体验。

| MicrosoftGame.config               | 访问权限                              | 预期客户体验                             |
| ---------------------------------- | --------------------------------- | ---------------------------------- |
| 指定了 **privateNetworkClientServer** | 允许未经请求的入站 LAN 流量                  | 游戏例外将在可执行映像安装期间按游戏包中的指定被添加。        |
| 未指定 **privateNetworkClientServer** | 保持默认行为，阻止所有未经请求的入站 LAN 流量         | 不显示任何通知。未经请求的入站 UDP/TCP 数据包会被静默丢弃。 |
| 指定了 **internetClientServer**       | 允许未经请求的入站点对点 Internet 流量          | 游戏例外将在可执行映像安装期间按游戏包中的指定被添加。        |
| 未指定 **internetClientServer**       | 保持默认行为，阻止所有未经请求的入站点对点 Internet 流量 | 不显示任何通知。未经请求的入站 UDP/TCP 数据包会被静默丢弃。 |

### 如何为 GDK 游戏编辑 MicrosoftGame.config

* 前往游戏的源代码目录。
* 打开 **MicrosoftGame.config**。
* 添加以下代码片段并保存文件。

请注意，构建 MXIXVC 包时会在 **SubmissionValidator** 日志文件中产生警告。

```xml theme={null}
<ExtendedAttributeList>
  <ExtendedAttribute Name="Capability" Value="privateNetworkClientServer"/>
  <ExtendedAttribute Name="Capability" Value="internetClientServer"/>
</ExtendedAttributeList>
```

当游戏 **MicrosoftGame.config** 文件中添加了属性时，它们会应用到生成的 **AppXManifest.xml** 中。有关生成过程的更多信息，请参阅 [MicrosoftGame.config 概述](/build/core-features/common/game-config/MicrosoftGameConfig-Overview)。

<a id="firewall-and-how-it-affects-traffic" />

## 防火墙及其对流量的影响

用户的防火墙及其设置会影响游戏的联网能力。本节介绍防火墙对 GDK 游戏流量的影响，帮助你收紧网络设计。

为便于理解，本主题还提供 Win32 游戏在受防火墙影响下的端口访问情况作为参考。

总的来说，你需要做好准备：**privateNetworkClientServer** 和 **internetClientServer** 属性对使用第三方防火墙的用户没有效果。预计这类用户占全部用户的 30-40%。

### GDK 可执行游戏

**使用默认 Windows 10 防火墙的用户**

* **privateNetworkClientServer** 和 **internetClientServer** 属性按前述方式生效
* 无论是否定义了 **privateNetworkClientServer** 和 **internetClientServer** 属性，出站流始终可以工作。只要用户向远程服务器/设备发送了第一个数据包，来自该设备的后续入站数据包就会被送达。

**使用第三方防火墙的用户**

* **privateNetworkClientServer** 和 **internetClientServer** 属性没有效果。这些用户会静默丢弃未经请求的入站数据包。请注意：**无论**你在打包时是否在 **MicrosoftGame.config** 中声明访问能力，都是如此。
* 所有端口——包括首选本地 UDP 多人游戏端口——都会受到相应防火墙所指定策略的约束。
* 出站流通常可以正常工作。是否通过第三方防火墙设置合理放行游戏的网络访问权限由用户决定。

### Win32 可执行游戏

**注意：** 本节仅作对比之用。GDK 游戏不是 Win32 游戏。我们建议 PC 游戏使用 GDK 进行开发。

**使用默认 Windows 防火墙的用户**

* 首次启动时会显示通知，让用户决定拒绝或允许该应用的网络访问以连接到游戏服务器。
* 出站流始终可以工作，但不会有 UI 通知。

## 另请参阅

* [Windows Sockets 2 (Winsock)](https://learn.microsoft.com/windows/desktop/WinSock/windows-sockets-start-page-2)

* [XBOX 主机端口行为 (NDA 主题)](/build/console-features/networking/game-mesh/xbox-console-port-behavior)

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

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


## Related topics

- [XBOX 主机端口行为](/zh-CN/build/console-features/networking/game-mesh/xbox-console-port-behavior.md)
- [GDK 中的 Windows Sockets 简介](/zh-CN/build/console-features/networking/game-mesh/winsock-intro-networking.md)
- [XBOX 游戏的 Game mesh 网络](/zh-CN/build/console-features/networking/game-mesh/index.md)
- [游戏网状通信：GDK 与 XDK 的差异](/zh-CN/build/console-features/networking/xdk-migration/xdk-migration-game-mesh-networking.md)
- [首选本地 UDP 多人游戏端口网络 API](/zh-CN/build/console-features/networking/game-mesh/preferred-local-udp-multiplayer-port-networking.md)
