C#Minecraft连接协议错误

时间:2017-12-21 13:00:54

标签: c# sockets client minecraft

起初,我很抱歉我的英语:(

今天,我开始研究应该连接到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);
    }

之后,服务器应该发回加密请求, 但服务器什么也没发送。

我哪里错了?

感谢您的帮助!

乔纳森

0 个答案:

没有答案