数据包的填充字节

时间:2013-11-01 12:28:30

标签: c# byte padding

我正在为我的IT课程开发一个小型的Minecraft实施项目。我正在实施'经典扩展协议',它允许更多功能e.t.c。

我的不是问题,只是一个问题,我该如何检查数据包的填充字节? (需要确定播放器是从标准客户端还是从扩展客户端连接)。欢呼声。

1 个答案:

答案 0 :(得分: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 opcode = reader.ReadOpCode();
                        switch( opcode ) {

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