我一直在使用C#模拟Minecraft服务器,但我无法将响应发送回客户端以获取此处列出的服务器查询协议:
所以这里是我的代码,问题是客户似乎没有收到"服务器发送的响应":
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;我现在正在努力。
如果您有任何问题可以随意提问,因为我知道这并不是特定于遇到的问题。