【问题标题】:Packet's Padding Byte数据包的填充字节
【发布时间】:2013-11-12 15:42:30
【问题描述】:

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

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

【问题讨论】:

    标签: c# byte padding


    【解决方案1】:

    你可以使用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;
    

    【讨论】:

    • 干杯伙伴,会看看它:)
    • 这很有帮助,但不是我想要的,我想知道,一旦您收到 Player Identification 数据包,您如何读取填充并检查他们是否正在使用 CPE?
    • 这是我正在尝试做的部分:“服务器必须读取 ClientIdentification 数据包并检查其填充字节。如果此字节设置为 0x42(十进制 66),假设客户端支持 CPE "
    • @SamSkipsFowler 一旦玩家连接,就会运行一个数据包,您可以在classic 数据包上看到 有一个未使用的数据包,在 FemtoCraft 上搜索 0x42 的整个解决方案,您会找到我在说的地方关于。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    相关资源
    最近更新 更多