2011-01-30 223 views
0

(我特别使用VB.net,我指的协议是一个“的Minecraft服务器”)了解服务器协议

我有我正在做一个服务器上的协议下面的链接了解详细信息。现在

Protocol

,根据该协议,前三个字节指定数据包类型。我检查了将连接到服务器的客户端的实际源代码(以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

有人能为我提供什么我做错了细节?

+0

该编辑是不必要的。标题需要保持原样。我的问题,如果你考虑到的话,是关于理解发送给我的字节,而不一定要求你知道协议。我仅包含协议信息,以便您可以将其与我提供的代码进行比较。 – FreeSnow 2011-01-30 03:10:00

回答

2

数据包类型是1个字节,而不是3个字节。描述3 bytes + length of strings引用1字节的数据包ID和描述字符串长度的两字节大端短格式值。因此您正在读取的02 00 08表示数据包类型2,字符串长度为8.接下来的8个字节将是字符串的内容。

+0

哇,谢谢!我一直在寻找这个信息无处不在! – FreeSnow 2011-01-30 20:17:50