Minecraft服务器Ping协议C#

时间:2014-06-08 15:34:50

标签: c# sockets networking tcp minecraft

我一直在使用C#模拟Minecraft服务器,但我无法将响应发送回客户端以获取此处列出的服务器查询协议:

Server List Ping

所以这里是我的代码,问题是客户似乎没有收到"服务器发送的响应":

            TcpListener tcpl;
            TcpClient tcpc;

            //tcp for server ping
            tcpl = new TcpListener(IPAddress.Parse("127.0.0.1"), QUERY_PORT);
            tcpl.Start();
            tcpl.BeginAcceptSocket(new AsyncCallback(tcp_recv), null);

            tcpc = tcpl.AcceptTcpClient();
            tcpc.SendBufferSize = 1024;
            NetworkStream ns = tcpc.GetStream();

            //inside tcp_recv
            else if (buffer_one[0] == 0xFE && buffer_one[1] == 0x01) //status ping protocol version 4
            {
                invoke_console("Handling Status Ping Protocol Version 4");

                byte[] data = { 0xFF }; //kick message
                byte[] data_len = { 0x00, 0x23 };
                misc.concat_byte_array(ref data, data_len);
                misc.concat_byte_array(ref data, new byte[] { 0x00, 0xa7, 0x00, 0x31, 0x00, 0x00 }); //maningless chars
                misc.concat_byte_array(ref data, Encoding.BigEndianUnicode.GetBytes("47"));
                misc.concat_byte_array(ref data, new byte[] { 0x00, 0x00 });
                misc.concat_byte_array(ref data, Encoding.BigEndianUnicode.GetBytes("1.4.2"));
                misc.concat_byte_array(ref data, new byte[] { 0x00, 0x00 });
                misc.concat_byte_array(ref data, Encoding.BigEndianUnicode.GetBytes("A Minecraft Server"));
                misc.concat_byte_array(ref data, new byte[] { 0x00, 0x00 });
                misc.concat_byte_array(ref data, Encoding.BigEndianUnicode.GetBytes("0"));
                misc.concat_byte_array(ref data, new byte[] { 0x00, 0x00 });
                misc.concat_byte_array(ref data, Encoding.BigEndianUnicode.GetBytes("20"));

                //File.WriteAllBytes("sending.txt", data);

                //invoke_console(String.Format("Total number of bytes: {0}", data.Length));
                //invoke_console(String.Format("Sent {0} bytes...", s.Send(data))); //send protocol 4 data
                ns.Write(data, 0, data.Length);
            }

这是异步的,我没有粘贴我用于AsyncCallback的函数,因为它有很多无意义的调试代码和1.7 ping协议的测试代码,但是一切似乎都在使用1.6协议所以我和#39;我现在正在努力。

如果您有任何问题可以随意提问,因为我知道这并不是特定于遇到的问题。

0 个答案:

没有答案