C# 数据包';s填充字节

C# 数据包';s填充字节,c#,byte,padding,C#,Byte,Padding,我正在为我的IT课程做一个小型minecraft实施项目。我正在实施“经典扩展协议”,该协议允许更多功能e.t.c 我的不是问题,只是一个问题,我该如何检查数据包的填充字节?(需要确定播放机是从标准客户端还是从扩展客户端连接)。干杯。您可以使用源代码来理解,下面是一个编码ExtAddPlayerName数据包以发送给客户端的示例: public static Packet ExtAddPlayerName(short nameid, string name, string ListName, s

我正在为我的IT课程做一个小型minecraft实施项目。我正在实施“经典扩展协议”,该协议允许更多功能e.t.c

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

您可以使用源代码来理解,下面是一个编码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 );
        }
您可以设置要发送的字节的确切位置,如地图。 正如第页所述,它有字节的位置,您所要做的就是设置它们。向客户端发送字节[],字节[0]确定数据包,通过设置新数据包yourpack=new Packet(PacketName)您的字节[0]自动获取fCraft/femtocraft上的数据包名称。 关于从客户端获取数据包,可以使用操作码变量:

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

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

干杯,伙计,请看一看:)这很有帮助,但这不是我想要的,我想知道,一旦你收到球员身份识别包,你如何阅读填充内容并检查他们是否使用CPE?这是我正在尝试做的部分:“服务器必须读取ClientIdentification数据包并检查其填充字节。如果这个字节被设置为0x42(66位小数),假设客户端支持CPE“@SamSkipsFowler有一个数据包在播放器连接后运行,你可以在数据包上看到一个未使用的数据包,在整个解决方案上搜索0x42,你会找到我所说的位置。