【问题标题】:How to know if a server is online or not, if we only know the IP?如果我们只知道 IP,如何知道服务器是否在线?
【发布时间】:2012-12-07 08:53:09
【问题描述】:

那怎么办,服务器不是 HTTP 服务器,它是 ArmA 游戏服务器。 我尝试在下面的代码中使用 CURL 来实现它,但它不起作用,它总是显示 Offline。

IsOnline( "xx.xxx.xx.xxx" );

    bool IsOnline( string url )
    {

        CURL *curl;

        curl = curl_easy_init();

        if(curl) 
        {
            curl_easy_setopt(curl, CURLOPT_URL, url.c_str() );


            CURLcode result = curl_easy_perform(curl);
            if ( result != CURLE_OK )
            {
               error_string = curl_easy_strerror( result );
               return false;
            }

            curl_easy_cleanup(curl);
            curl_global_cleanup();
            return true;
        }

        curl_easy_cleanup(curl);
        curl_global_cleanup();
        return false;
    }

【问题讨论】:

    标签: c++ winapi curl network-programming


    【解决方案1】:

    您在代码中所做的是尝试发送 HTTP 请求。失败的原因是游戏服务器机器没有运行 HTTP 服务器。

    查看机器是否在线的常用方法是通过pinging它。 Ping 使用 ICMP 协议。这是一个解释如何从 C++ 程序 ping 的教程(它是特定于 Windows 的):http://www.developerfusion.com/article/4628/how-to-ping/

    但是,服务器的管理员可能已禁用 ICMP,在这种情况下,即使机器在线,机器也不会响应 ping。此外,如果机器在线并响应 ping,但游戏服务器软件本身没有运行,您可能会得到“误报”。

    所以我认为最好的办法是找出游戏服务器本身侦听的端口并尝试在这些端口上建立连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多