2011-01-30 1 views
0

(je suis spécifiquement en utilisant VB.net, le protocole, je fais allusion à un « Minecraft Server »)Protocole Comprendre Server

je le lien suivant pour plus de détails sur le protocole pour un serveur que je fais .

Protocol

Maintenant, selon ce protocole, les trois premiers octets doivent spécifier le type de paquet. J'ai vérifié le code source réel (en java) du client qui se connectera au serveur, et vérifié que ceci est vrai.

Le problème est que les trois premières valeurs d'octets devraient être l'hex du numéro du paquet.

Le paquet spécifique avec lequel je travaille (le premier paquet de vérification envoyé par le client).

du Protocole de Handshake Server Client: (Je n'ai pas un niveau de réputation assez élevé pour poster ce second lien, je vais le publier sous forme de texte au lieu)

mc.kev009.com/wiki/Protocol # Client_to_Server_2

Je peux lire la chaîne fournie après les trois premiers octets qui montrent le "nom d'utilisateur" envoyé par le client. Le problème est, je ne sais pas comment identifier les trois premiers. Ce n'est pas ce à quoi je m'attendais. Je supposais qu'après avoir converti les résultats entiers en une chaîne lisible, les trois premiers caractères seraient quelque chose de similaire à 002 ou 200. Au lieu de cela, j'ai reçu des caractères avec les codes ASCII de "2", "0" et "8" . Je sais que le numéro de paquet est 2, pourquoi suis-je obtenir un résultat si étrange?

Voici le code Je travaille actuellement avec:

code:

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 est une fonction qui affiche essentiellement les informations (une forme de sortie de débogage) -pw contient mes classes pour envoyer/recevoir des paquets sous forme de chaîne et d'octet. -PW.getTextPackets renvoie le demande envoyée par le paquet déjà converti en ASCII de sa forme d'octets par défaut -clientStream est que le flux sous-jacent de la clientTcp

Quelqu'un pourrait-il me donner des détails sur ce que je fais mal?

+0

Cette modification était inutile. Le titre doit rester tel qu'il était. Ma question, si vous en avez même tenu compte, consistait à comprendre les octets qui me sont envoyés, sans nécessairement exiger que vous connaissiez le protocole. J'ai inclus les informations de protocole SEULEMENT afin que vous puissiez le comparer avec mon code que j'ai fourni. – FreeSnow

Répondre

2

Le type de paquet est un octet, pas trois octets. La description 3 bytes + length of strings fait référence à l'ID de paquet de 1 octet et à la valeur courte big-endian de deux octets décrivant la longueur de la chaîne. Ainsi, le 02 00 08 que vous lisez indique le type de paquet 2, longueur de chaîne 8. Les 8 octets suivants seront le contenu de la chaîne.

+0

Wow, MERCI! J'ai cherché cette information PARTOUT! – FreeSnow

+0

Je vous voterais mais je n'ai pas une réputation assez élevée ... – FreeSnow

+0

La description des chaînes était sous _Data Types_ dans votre lien de protocole. 'Chaîne UTF-8. Préfixé par un court contenant la longueur de la chaîne ». P.S. En cliquant sur la coche acceptera la réponse; ^) –

Questions connexes