Понимание протокола сервера - PullRequest
0 голосов
/ 30 января 2011

(я специально использую VB.net, протокол, на который я ссылаюсь, предназначен для "Сервера Minecraft")

У меня есть следующая ссылка для получения подробной информации о протоколе для сервера, который я делаю.

Протокол

Теперь, согласно этому протоколу, первые три байта должны указывать тип пакета.Я проверил фактический исходный код (в Java) клиента, который будет подключаться к серверу, и подтвердил, что это правда.

Проблема в том, что первые три байта должны быть шестнадцатеричным числом номера пакета.

Конкретный пакет, с которым я работаю (Первый проверочный пакет, отправленный клиентом).

Protocol :: Client Server Handshake: (У меня недостаточно высокий уровень репутации, чтобы опубликовать вторую ссылку, вместо этого я опубликую ее в виде простого текста)

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

Может кто-нибудь сообщить мне подробности о том, что я делаю неправильно?1032 *

1 Ответ

2 голосов
/ 30 января 2011

Тип пакета - 1 байт, а не 3 байта.Описание 3 bytes + length of strings относится к 1-байтовому идентификатору пакета и двухбайтовому короткому значению с прямым порядком байтов, описывающему длину строки.Таким образом, 02 00 08, который вы читаете, указывает тип пакета 2, длину строки 8. Следующие 8 байтов будут содержимым строки.

...