我想制作一个微型我的世界客户端,该客户端加入我的世界服务器并键入我想要的任何内容。但是首先,我想获取服务器的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
检查一下这个也是我的世界服务器协议https://wiki.vg/Protocol
我收到此错误以进行响应:
?{“ translate”:“ disconnect.genericReason”,“ with”:[“内部异常:io.netty.handler.codec.CorruptedFrameException:长度大于21位”]}