2011-01-30 4 views
0

(내가 특별히 내가 언급하고있는 프로토콜은 "마인 크래프트 서버"입니다, VB.net을 사용하고 있습니다) 이해 서버 프로토콜

나는 내가 만들고있어 서버의 프로토콜에 대한 자세한 내용은 다음 링크가 .

Protocol

지금,이 프로토콜에있어서, 상기 제 3 바이트는 패킷 유형을 지정한다. 서버에 연결될 클라이언트의 실제 소스 코드 (java)를 확인하고이 사실을 확인했습니다.

문제는 처음 세 바이트 값이 패킷 번호의 16 진수 여야한다는 것입니다.

내가 작업하고있는 특정 패킷 (클라이언트가 보낸 첫 번째 확인 패킷).

은 프로토콜 : 클라이언트 서버 핸드 셰이크 :

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

패킷 유형은 3 바이트가 아니라 1 바이트입니다. 설명 3 bytes + length of strings은 1 바이트 패킷 ID와 문자열 길이를 설명하는 2 바이트 빅 엔디안 short 값을 나타냅니다. 따라서 읽는 02 00 08은 패킷 유형 2, 문자열 길이 8을 나타냅니다. 다음 8 바이트는 문자열의 내용이됩니다.

+0

와우, 감사합니다. 나는이 정보를 어디에서나 찾고 있었다! – FreeSnow

+0

나는 당신을 투표 하겠지만 충분한 명성을 얻지 못했습니다 ... – FreeSnow

+0

문자열의 설명이 프로토콜 링크의 _ 데이터 유형 _ 아래에 있습니다. 'UTF-8 문자열. 문자열의 길이를 포함하는 short로 접두어가 붙습니다. 추신 체크 표시를 클릭하면 답변을 수락합니다. ^) –