2013-03-28 23 views
7

Quindi ho trovato questo piccolo frammento di codice che consentiva di eseguire il ping su un server Minecraft in PHP, ma ora voglio farlo in C#.C# ping minecraft

Ho provato a fare questo da sola, ma per qualche motivo non è solo lavoro

 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(); 

Il server sembra ignorare completamente il pacchetto. Questo è il frammento di codice che ho trovato:

$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; 

Qualcuno potrebbe sottolineare quello errore che sto facendo? Grazie!

+0

probabilmente desidera rimuovere l'IP considerando che questo è un luogo completamente pubblico. –

+0

Il primo frammento di codice è quello che ho costruito in C#, il secondo è lo snippet in PHP che ho trovato da qualche parte su StackOverflow – user2073973

risposta

9

Come descritto here

Il client avvia una connessioneTCP al server minecraft sulla porta standard . Invece di eseguire l'autenticazione e il login (come descritto in Protocol Encryption), invia la sequenza di due byte FE 01. Si tratta di un pacchetto di ping dell'elenco di server 0xFE . Se il secondo byte (0x01) è mancante, il server attende circa 1000 ms quindi risponde con il server -> Formato client utilizzato in 1.3 e precedenti.

è necessario inviare una richiesta TCP, mentre si sta inviando un pacchetto UDP ...

+0

Oh wow, ho capito dal momento che Minecraft usa il protocollo UDP, userebbe anche il protocollo UDP per il ping pacchetto. Grazie! – user2073973

+0

Bello il suo lavoro ora! – user2073973

+0

@ user2073973 Una buona forma è accettare una risposta se risolve il problema. – Yaur