【问题标题】:C# ping minecraftC# ping 我的世界
【发布时间】:2016-04-13 08:37:46
【问题描述】:

所以找到了这个小代码 sn-p 可以让你在 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();

服务器似乎完全忽略了数据包。这是我找到的代码sn-p:

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

谁能指出我犯了什么错误?谢谢!

【问题讨论】:

  • 考虑到这是一个完全公共的地方,可能想要删除 IP。
  • 第一个代码 sn-p 是我在 C# 中构建的,第二个是我在 stackoverflow 上的某个地方找到的 PHP 中的 sn-p

标签: c# php ping minecraft


【解决方案1】:

here所述

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

您需要在发送 UDP 数据包时发送 TCP 请求...

【讨论】:

  • 哦,哇,我想既然我的世界使用UDP协议,它也会使用UDP协议进行ping数据包。谢谢!
  • @user2073973 好的形式是在解决您的问题时接受答案。
  • @Yaur 啊,是的,我尝试投票支持你的答案,但它说我需要 15 个代表,我是 stackoverflow 的新手。我现在将您的答案标记为解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多