2011-01-30 261 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