2013-03-28 34 views
7

Więc znalazłem ten mały fragment kodu, który pozwoliłby ci pingować serwer Minecrafta w PHP, ale teraz chcę to zrobić w C#.C# ping minecraft

Próbowałem robić to na własną rękę, ale z jakiegoś powodu jej po prostu nie działa

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

Serwer wydaje się po prostu całkowicie ignorować pakiet. Oto fragment kodu, który znalazłem:

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

Czy ktoś mógłby wskazać, jaki błąd popełniam? Dziękuję Ci!

+0

prawdopodobnie chcesz usunąć IP biorąc pod uwagę to miejsce całkowicie publicznego. –

+0

Pierwszy fragment kodu jest tym, co napisałem w C#, drugim jest fragment kodu w PHP, który znalazłem gdzieś tutaj na stackoverflow – user2073973

Odpowiedz

9

Jak opisano here

Klient inicjuje TCP połączenie z serwerem Minecraft na standardowego portu. Zamiast robić auth i logować się (jak wyszczególniono w Encryption Protocol), wysyła ona sekwencję bajtów FE 01. Jest to pakiet ping ping dla serwera 0xFE z numerem serwera . Jeśli drugi bajt (0x01) nie ma numeru , serwer czeka około 1000 ms, następnie odpowiada za pomocą serwera -> Format klienta używany w wersji 1.3 i wcześniejszych.

trzeba wysłać żądanie TCP natomiast jesteś wysyłaniu pakietów UDP ...

+0

Och, wow, pomyślałem, że ponieważ Minecraft używa protokołu UDP, użyłoby to również protokołu UDP do pingowania paczka. Dziękuję Ci! – user2073973

+0

Miło działa teraz! – user2073973

+0

@ user2073973 Dobra forma to zaakceptowanie odpowiedzi, jeśli rozwiąże ona Twój problem. – Yaur