2011-01-30 3 views
0

(я специально с использованием VB.net, протокол я имею в виду это для «Minecraft Server»)протокол Понимание сервера

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

Protocol

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

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

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

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

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

ответ

2

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

+0

Ничего себе, СПАСИБО! Я искал эту информацию ВЕЗДЕ! – FreeSnow

+0

Я бы проголосовал за вас, но у меня недостаточно высокая репутация ... – FreeSnow

+0

Описание строк было в разделе _Data Types_ в вашей ссылке протокола. 'Строка UTF-8. Префикс коротким, содержащим длину строки'. Постскриптум Щелчок по галочке примет ответ; ^) –

Смежные вопросы