跳到主要内容

连接状态

描述

本页面包含NetStats_ConnectionStatus使用的连接状态常量。这些常量由 RakNet(SA-MP 使用的网络库)内部使用。

常用状态

ID状态(英文常量)描述
0无操作状态(CONNECTION_STATUS_NO_ACTION / CONNSTAT_NO_ACTION)当需要向客户端发送数据包时,该操作将由独立线程处理。在此线程发送数据包的过程中,服务器可能同时接收到断开连接的数据包(这种情况可能导致数据竞争,从而引发未定义行为)。为解决此问题,连接状态将切换为 CONNECTION_STATUS_NO_ACTION,此时对玩家 ID 的任何修改都将被暂停,直到更新线程向主线程发出"执行许可"信号。作为服务器开发者,此连接状态与您并无直接关联,因此您可能永远不需要主动处理该状态。
1立即断开(CONNECTION_STATUS_DISCONNECT_ASAP / CONNSTAT_DISCONNECT_ASAP)客户端将被尽快强制断开连接。在断开流程中 NetStats_ConnectionStatus 可能返回此值,具体表现为:玩家尚未完成"实质"断开操作,但OnPlayerDisconnect回调可能已为此玩家触发。
2静默断开(CONNECTION_STATUS_DISCONNECT_ASAP_SILENTLY / CONNSTAT_DISCONNECT_ASAP_SILNT)客户端将被立即断开且不发送 ID_DISCONNECTION_NOTIFICATION 数据包。SA-MP 在多种场景下触发此状态(尽管 SA-MP 核心逻辑层可能不直接使用,但 RakNet 底层网络库必定会处理),典型案例如:客户端输入错误的服务器密码时。
3未确认断开(CONNECTION_STATUS_DISCONNECT_ON_NO_ACK / CONNSTAT_DISCONNECT_ON_NO_ACK)未明确用途。
4连接请求(CONNECTION_STATUS_REQUESTED_CONNECTION / CONNSTAT_REQUESTED_CONNECTION)客户端已向服务器发起连接请求。
5处理连接请求(CONNECTION_STATUS_HANDLING_CONNECTION_REQUEST / CONNSTAT_HANDLING_CONN_REQ)服务器当前正在处理客户端的连接请求。
6未验证发送方(CONNECTION_STATUS_UNVERIFIED_SENDER / CONNSTAT_UNVERIFIED_SENDER)初始状态下,所有传入连接请求均标记为 UNVERIFIED_SENDER。在此状态持续期间,服务器仅会处理 ID_CONNECTION_REQUEST 类型的数据包。如果客户端发送其他类型的数据包,服务器将自动终止连接并将该客户端 IP 加入临时黑名单。目前尚不确定NetStats_ConnectionStatus是否可能返回此状态值。
7加密设置(CONNECTION_STATUS_SET_ENCRYPTION_ON_MULTIPLE_16_BYTE_PACKET / CONNSTAT_SET_ENCRYPTION)未明确用途。
8已连接(CONNECTION_STATUS_CONNECTED / CONNSTAT_CONNECTED)客户端已成功建立与服务器的连接。