0
我正在爲我的IT課程開發一個小型的Minecraft實施項目。我正在實施允許更多功能e.t.c的「經典擴展協議」。數據包的填充字節
我不是一個問題,只是一個問題,我將如何去檢查數據包的填充字節? (需要確定玩家是從標準客戶端還是從擴展客戶端連接)。乾杯。
我正在爲我的IT課程開發一個小型的Minecraft實施項目。我正在實施允許更多功能e.t.c的「經典擴展協議」。數據包的填充字節
我不是一個問題,只是一個問題,我將如何去檢查數據包的填充字節? (需要確定玩家是從標準客戶端還是從擴展客戶端連接)。乾杯。
您可以使用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;
乾杯隊友,會看看吧:) –
這是有幫助的,但它並不完全是我一直在尋找,我在想,一旦您會收到播放器識別數據包,然後如何讀取填充並檢查它們是否使用CPE? –
這是我想要做的部分:「服務器必須讀取ClientIdentification包並檢查其填充字節。如果該字節設置爲0x42(十進制爲66),則假定客戶端支持CPE」 –