如果我们只知道IP,如何知道服务器是否在线?

Stu*_*ntX 1 c++ winapi curl network-programming

怎么办,服务器不是HTTP服务器,它是ArmA游戏服务器.我试图在下面的代码中使用CURL实现它,但它不起作用,它总是显示脱机.

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;
    }
Run Code Online (Sandbox Code Playgroud)

小智 5

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

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

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

所以我认为你最好的办法是找出游戏服务器自己监听的端口并尝试在这些端口上建立连接.