Не удается рукопожатие с сервером Minecraft с использованием сокетов с C # Как? - PullRequest
0 голосов
/ 24 июня 2019

Я хочу сделать мини-клиент майнкрафт, который присоединяется к серверу майнкрафт и печатает все, что я хочу.Но, во-первых, я хочу получить сообщение MOTD сервера.Но не могли бы вы помочь мне в этом?

tatic void Main(string[] args)
    {
        s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        s.Connect(new IPEndPoint(IPAddress.Parse("192.168.1.29"), 25565));
        byte[] buffer = new byte[1024 * 1024];
        Task.Run(() => SendCommands());
        while (true)
        {
            s.Receive(buffer);
            Console.WriteLine(Encoding.ASCII.GetString(buffer));
            buffer = new byte[1024 * 1024];
        }
    }

    static void SendCommands()
    {
        MemoryStream ms = new MemoryStream();
        int protocolVersion = -1;
        string svaddress = "102.168.1.29";
        ushort port = 25565;
        int nextstate = 1;
        ms.Write(BitConverter.GetBytes(protocolVersion));
        ms.Write(Encoding.ASCII.GetBytes(svaddress));
        ms.Write(BitConverter.GetBytes(port));
        ms.Write(BitConverter.GetBytes(nextstate));
        s.Send(ms.ToArray());
        ms.Close();
        s.Send(new byte[0]);
    }

Я думаю, что эта проблема из-за переменной VarInt.Я использую обычный Integer вместо VarInt, но я не мог понять, как работает этот VarInt.Проверьте это https://wiki.vg/Protocol#VarInt_and_VarLong

Проверьте это тоже протокол сервера Minecraft https://wiki.vg/Protocol

И я получаю эту ошибку для ответа:

? {"Translate": "disconnect.genericReason "," with ": [" Внутреннее исключение: io.netty.handler.codec.CorruptedFrameException: длина шире, чем 21-разрядная "]}

...