起初,我很抱歉我的英语:(
今天,我开始研究应该连接到Minecraft服务器的项目。
所以我查看了连接协议(http://wiki.vg/Protocol), 并且看到一开始,客户端应该发送握手(下一个状态2继续)。 我是这样构建的:
public void Handshake(int ver, byte status) //status = 1 for status, 2 for login
{
byte[] handshake = new byte[2 + ver.ToString().Length + IP.Length + port.ToString().Length + 1];
handshake[0] = Convert.ToByte(1 + ver.ToString().Length + IP.Length + port.ToString().Length + 1); //packet length
handshake[1] = 0; //packet ID
byte[] Bver = ToByte(ver.ToString().ToCharArray()); //ver as a byte array
Array.Copy(Bver, 0, handshake, 2, Bver.Length); //set Bver
byte[] BIP = ToByte(IP.ToCharArray()); //IP as a byte array
Array.Copy(BIP, 0, handshake, 2 + Bver.Length, BIP.Length); //set BIP
byte[] Bport = ToByte(port.ToString().ToCharArray()); //port as a byte array
Array.Copy(Bport, 0, handshake, 2 + Bver.Length + BIP.Length, Bport.Length); //set Bport
handshake[handshake.Length - 1] = status;
client.SendByteArray(handshake);
}
之后,客户端应该发送Login Start,所以:
public void LoginStart()
{
byte[] loginStart = new byte[name.Length + 2];
loginStart[0] = Convert.ToByte(1 + name.Length); //packet length
loginStart[1] = 0; //packet ID
byte[] Bname = ToByte(name.ToCharArray());
Array.Copy(Bname, 0, loginStart, 2, Bname.Length);
client.SendByteArray(loginStart);
}
之后,服务器应该发回加密请求, 但服务器什么也没发送。
我哪里错了?
感谢您的帮助!
乔纳森