1

それをどのように行うことができますか。サーバーは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;
    }
4

1 に答える 1

5

コードで行っているのは、HTTPリクエストを送信しようとしていることです。失敗する理由は、ゲームサーバーマシンがHTTPサーバーを実行していないためです。

マシンがオンラインであるかどうかを確認する通常の方法は、pingを実行することです。PingはICMPプロトコルを使用します。これは、C ++プログラム(Windows固有)からpingを実行する方法を説明するチュートリアルです。http ://www.developerfusion.com/article/4628/how-to-ping/

ただし、サーバーの管理者がICMPを無効にしている可能性があります。その場合、マシンはオンラインであってもpingに応答しません。さらに、マシンがオンラインでpingに応答しているが、ゲームサーバーソフトウェア自体が実行されていない場合、「誤検知」が発生する可能性があります。

したがって、最善の策は、ゲームサーバー自体がリッスンしているポートを見つけて、それらのポートで接続を試みることだと思います。

于 2012-12-07T09:06:33.600 に答える