了解服务器协议
(我特别使用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和描述字符串长度的两字节大端短格式值。因此您正在读取的02 00 08
表示数据包类型2,字符串长度为8.接下来的8个字节将是字符串的内容。
哇,谢谢!我一直在寻找这个信息无处不在! – FreeSnow 2011-01-30 20:17:50
该编辑是不必要的。标题需要保持原样。我的问题,如果你考虑到的话,是关于理解发送给我的字节,而不一定要求你知道协议。我仅包含协议信息,以便您可以将其与我提供的代码进行比较。 – FreeSnow 2011-01-30 03:10:00