2013-03-28 50 views
7

所以找到了这个小代码片段,它可以让你在PHP中ping一个Minecraft服务器,但是现在我想在C#中执行此操作。C#ping minecraft

我试图对我自己的,但由于某种原因,这样做它只是不工作

 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; 

任何人都可以请指出我犯了什么错误吗?谢谢!

+0

可能要考虑删除这完全是一种公共场所的IP。 –

+0

第一个代码片段是我在C#中构建的,第二个是PHP中的代码片段,我在这里找到了stackoverflow – user2073973

回答

9

如上所述here

客户机启动的 标准端口上的TCP连接到的Minecraft服务器。它不是进行身份验证和登录(详见 协议加密),而是发送两个字节序列FE 01.这是一个 0xFE服务器列表ping数据包。如果第二个字节(0x01)缺失 ,则服务器等待约1000ms,然后使用1.3和更低版本中使用的服务器 - > 客户端格式进行答复。

你需要发送一个TCP请求,而你发送一个UDP包...

+0

哦哇,我想因为minecraft使用UDP协议,它也会使用UDP协议进行ping包。谢谢! – user2073973

+0

现在不错! – user2073973

+0

@ user2073973好的形式是接受一个答案,如果它解决了你的问题。 – Yaur