如何解析Counter-Strike 2服务器A2S_Info协议返回的字节数组?
解析Source引擎A2S_Info协议响应的VB实现方法
Source引擎的A2S_Info协议响应是以空字节(\x00)分隔的UTF-8字符串序列,针对你需要提取的服务器名称、地图、版本字段,直接按固定顺序分割解析即可,具体实现如下:
核心解析逻辑
- 跳过响应头:前4字节是固定标识(
0xFF 0xFF 0xFF 0xFF 0x49),直接从第5字节开始处理 - 按空字节分割字段:遍历字节数组,将连续非0字节拼接为字符串,遇到0字节则完成一个字段的提取
- 按固定顺序提取目标字段:
- 服务器名称:第2个分割出的字符串(跳过第一个协议版本数字字段)
- 地图名称:第3个分割出的字符串
- 服务器版本:第12个分割出的字符串
VB代码实现
Function ParseCS2ServerInfo(responseBytes() As Byte) As Dictionary(Of String, Object) Dim result As New Dictionary(Of String, Object) Dim currentByteList As New List(Of Byte) Dim fieldCount As Integer = 0 ' 跳过前4字节的响应头,从索引4开始遍历 For i As Integer = 4 To responseBytes.Length - 1 If responseBytes(i) = 0 Then ' 将字节列表转为UTF-8字符串 Dim fieldContent As String = System.Text.Encoding.UTF8.GetString(currentByteList.ToArray()) Select Case fieldCount Case 1 : result("ServerName") = fieldContent Case 2 : result("MapName") = fieldContent Case 6 : result("PlayerCount") = CInt(fieldContent) ' 玩家数字段 Case 11 : result("ServerVersion") = fieldContent End Select currentByteList.Clear() fieldCount += 1 Else currentByteList.Add(responseBytes(i)) End If Next Return result End Function
关键注意事项
- 必须用UTF-8编码转换字符串,避免
BLACKBØX这类含特殊字符的内容乱码 - 基础字段的顺序是固定的,即使服务器返回扩展字段,也不会影响目标字段的位置
- 玩家数是数值类型,需要将对应字段转换为Integer
内容的提问来源于stack exchange,提问作者fpaezf
相关产品推荐
相关产品推荐

