(我专门使用VB.net,我指的协议是“Minecraft服务器”)
我有以下链接,了解有关我正在制作的服务器的协议的详细信息。
现在,根据该协议,前三个字节应该指定数据包类型。我检查了将连接到服务器的客户端的实际源代码(java),并验证了这是真的。
问题是,前三个字节值应该是数据包编号的十六进制。
我正在使用的特定数据包(客户端发送的第一个验证数据包)。
协议 :: 客户端服务器握手:(我没有足够高的声誉级别来发布第二个链接,我将其以纯文本形式发布)
mc.kev009.com/wiki/Protocol#Client_to_Server_2
我可以读取在显示客户端发送的“用户名”的前三个字节之后提供的字符串。问题是,我不知道如何识别前三个。这不是我所期望的。
我假设将整个结果转换为可读字符串后,前三个字符将类似于 002 或 200。相反,我收到的是 ASCII 代码“2”、“0”和“8”的字符。我知道数据包编号是 2,为什么我得到这么奇怪的结果?
这是我当前正在使用的代码:
代码:
cWrite("Waiting for client initiated 'handshake'...")
Dim HandshakePacket As String = PW.getTextPackets(clientStream)
cWrite(HandshakePacket.Substring(3).Trim & " has requested the required 'handshake'...")
Try
Select Case Convert.ToInt32(HandshakePacket.Substring(0, 3), 16)
Case 2
cWrite("~HANDSHAKE PACKET~")
Case Else
cWrite("Packet id: " & Convert.ToInt32(HandshakePacket.Substring(0, 3), 16) & " not recognized!")
End Select
Catch ex As Exception
'???
End Try
-cWrite 是一个主要显示信息的函数(调试输出的一种形式) -PW 包含我用于以字符串和字节形式发送/接收数据包的类。 -PW.getTextPackets 返回已从默认字节形式转换为 ASCII 的数据包发送的请求 -clientStream 只是来自 clientTcp 的底层流
有人可以向我提供有关我做错了什么的详细信息吗?
数据包类型是1字节,而不是3字节。描述
3 bytes + length of strings
指的是1字节数据包ID和描述字符串长度的2字节大端短值。所以你读到的02 00 08
表示数据包类型2,字符串长度8。接下来的8个字节将是字符串的内容。