2013-11-01 103 views
0

我正在爲我的IT課程開發一個小型的Minecraft實施項目。我正在實施允許更多功能e.t.c的「經典擴展協議」。數據包的填充字節

我不是一個問題,只是一個問題,我將如何去檢查數據包的填充字節? (需要確定玩家是從標準客戶端還是從擴展客戶端連接)。乾杯。

回答

0

您可以使用FemtoCraft源理解,這裏的編碼ExtAddPlayerName數據包發送給客戶的一個例子:

public static Packet ExtAddPlayerName(short nameid, string name, string ListName, string group, byte perm) 
     { 
      Packet packet = new Packet(OpCode.ExtAddPlayerName); 
      ToNetOrder(nameid, packet.Bytes, 1); 
      Encoding.ASCII.GetBytes(name.PadRight(64), 0, 64, packet.Bytes, 3); 
      Encoding.ASCII.GetBytes(ListName.PadRight(64), 0, 64, packet.Bytes, 67); 
      Encoding.ASCII.GetBytes(group.PadRight(64), 0, 64, packet.Bytes, 131); 
      packet.Bytes[132] = perm; 
      return packet; 
     } 

internal static void ToNetOrder(short number, byte[] arr, int offset) { 
      arr[offset] = (byte)((number & 0xff00) >> 8); 
      arr[offset + 1] = (byte)(number & 0x00ff); 
     } 

你設置你要發送的,就像一張地圖字節的確切位置。 正如在this頁面上所描述的那樣,它具有字節的位置,所有你需要做的就是設置它們。你發送byte []給客戶,byte [0]通過設置一個新數據包yourpack = new Packet(PacketName),你的byte [0]自動獲得fCraft/femtocraft的數據包名稱。 關於從客戶端得到數據包,您可以使用操作碼的變量:

OpCode opcode = reader.ReadOpCode(); 
         switch(opcode) { 

          case OpCode.Message: 
           if(!ProcessMessagePacket()) return; 
           break; 
+0

乾杯隊友,會看看吧:) –

+0

這是有幫助的,但它並不完全是我一直在尋找,我在想,一旦您會收到播放器識別數據包,然後如何讀取填充並檢查它們是否使用CPE? –

+0

這是我想要做的部分:「服務器必須讀取ClientIdentification包並檢查其填充字節。如果該字節設置爲0x42(十進制爲66),則假定客戶端支持CPE」 –