所以找到了这个小代码片段,可以让你在 PHP 中 ping Minecraft 服务器,但现在我想在 C# 中执行此操作。
我尝试自己这样做,但由于某种原因它不起作用
UdpClient client = new UdpClient();
IPEndPoint ep;
try
{
ep = new IPEndPoint(IPAddress.Parse("-snip-"), -snip-);
client.Connect(ep);
}
catch { Console.WriteLine("Error"); Console.ReadLine(); return; }
byte[] bytes = new byte[1];
bytes[0] = (byte)0xFE;
client.Send(bytes, bytes.Length);
IPEndPoint rep = new IPEndPoint(IPAddress.Any, 0);
byte[] recv = client.Receive(ref rep);
Console.WriteLine(ASCIIEncoding.ASCII.GetString(recv));
Console.ReadLine();
服务器似乎完全忽略了该数据包。这是我找到的代码片段:
$fp = fsockopen($host, $port, $errno, $errstr, $timeout);
if (!$fp) return false;
//Send 0xFE: Server list ping
fwrite($fp, "\xFE");
//Read as much data as we can (max packet size: 241 bytes)
$d = fread($fp, 256);
//Check we've got a 0xFF Disconnect
if ($d[0] != "\xFF") return false;
谁能指出我犯了什么错误?谢谢你!
如上所述here
客户端发起一个TCP连接到 Minecraft 服务器
标准端口。而不是进行身份验证和登录(详见
协议加密),它发送两个字节序列 FE 01。这是一个
0xFE 服务器列表 ping 数据包。如果第二个字节(0x01)是
丢失,服务器等待大约 1000ms 然后回复 Server ->
1.3 及更早版本中使用的客户端格式。
您需要在发送 UDP 数据包时发送 TCP 请求...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)