问题描述
所以发现这个小的代码片段,将允许你来ping在PHP中的Minecraft服务器,但现在我想这样做在C#。
So found this little code snippet that would allow you to ping a Minecraft server in PHP, but now i want to do this in C#.
我试着在我自己的,但由于某种原因,它只是不工作
I tried doing this on my own but for some reason its just not working
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();
服务器似乎只是完全忽略该数据包。这是代码片段,我发现:
The server seems to just completely ignore the packet. This is the code snippet i found:
$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;
任何人都可以请指出我正在做什么错误?谢谢!
Could anyone please point out what mistake i'm making? Thank you!
推荐答案
由于这里 >
As described here
客户端发起的 TCP 的
标准的端口上连接到服务器的Minecraft。代替这样做身份验证和登录(如
协议加密详述)的,它发送两个字节序列FE 01这是一个
0xFE的服务器列表ping包。如果第二个字节(0x01)的为
丢失,服务器等待约1000毫秒再与服务器回复 - >在1.3和更低版本
客户端格式
您需要发送一个TCP请求,而你发送一个UDP包...
you need to send a TCP request whereas you're sending an UDP packet...
这篇关于C#平的Minecraft的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!