Я хочу сделать мини-клиент майнкрафт, который присоединяется к серверу майнкрафт и печатает все, что я хочу.Но, во-первых, я хочу получить сообщение 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-разрядная "]}