了解服务器协议

时间:2011-01-30 01:22:51

标签: vb.net tcp protocols tcpclient

(我特意使用VB.net,我指的协议是用于“Minecraft服务器”)

我有以下链接,详细了解我正在制作的服务器的协议。

Protocol

现在,根据此协议,前三个字节指定数据包类型。我检查了将连接到服务器的客户端的实际源代码(在java中),并验证这是真的。

问题是,前三个字节值应该是数据包编号的十六进制。

我正在使用的特定数据包(客户端发送的第一个验证数据包)。

协议::客户端服务器握手:(我没有足够高的声誉级别来发布第二个链接,我会将其作为纯文本发布)

mc.kev009.com/wiki/Protocol#Client_to_Server_2

我可以读取显示客户端发送的“用户名”的前三个字节后提供的字符串。问题是,我不知道如何识别前三个。这不是我的预期。

我假定转换整个结果转换成可读的字符串后,前三个字符将是类似的东西,以002或200。相反,我接收到的字符“0”和“8”的ASCII码“2”。我知道数据包号是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 个答案:

答案 0 :(得分:2)

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