2016-07-06 7 views
1

これは私のDLibでの最初の試みです。私の目標は、多くのクライアントスレッドと同時に接続できるバックグラウンドサーバを持つことです。ドキュメントによると、dlib::serverの具体的な実装に進む方法はstart_async()にする必要があるので、これは私のサーバーを設定する方法です。DLib - なぜstart_async()はバックグラウンドスレッドで接続を受け付けませんか?

class TestServer : public dlib::server 
{ 
    private: 
     void on_connect(dlib::connection& c) 
     { 
      cout << "Hi." << endl; 
     } 

    public: 
     void start_server() 
     { 
      set_listening_ip("127.0.0.1"); 
      set_listening_port(4790); 

      start_async(); 
     } 
}; 

どのような次は私のServerMain.cppです:

int main(int argc, char** argv) 
{ 
    TestServer ts; 

    try 
    { 
     ts.start_server(); 
    } 
    catch(exception& e) 
    { 
     cerr << e.what() << endl; 
    } 

    return 0; 
} 

そして、これが私のClientMain.cpp次のとおりです。

私のサーバーを開始した後
int main(int argc, char** argv) 
{ 
    try 
    { 
     iosockstream stream("127.0.0.1:4790"); 

     cout << "CLIENT - Connected." << endl; 
    } 
    catch(exception& e) 
    { 
     cerr << e.what() << endl; 
    } 

    cout << "Done." << endl; 

    return 0; 
} 

、クライアントの結果とそれに接続しようとします例外:

unable to connect to '127.0.0.1:4790'

また、lsofnetstatも、ポート4790でリッスンするプロセスを示していません。 私は間違っていますか?

私はMac OS X 10.9.5で、-std=c++11 -DDLIB_NO_GUI_SUPPORTでコンパイルしています。 start_asyncのための右のDLIBから

+0

あなたが私たちにコードを示しているので、あなた自身でこれを解決しようとしていたようです。それは、追加の詳細が(どのようなOSのような)追加することはできないと言っていない... –

+0

@JesperJuhl私は最後の行にOSについての詳細を入れます。 – pr0gma

答えて

1

::サーバーのマニュアル()、それはあなたが(あなたが)(メインのまま)プログラムの終了を聞かせているのでだからあなたのサーバプログラムがすぐに終了し

does NOT block. That is, this function will return right away and 
the server will run on a background thread until clear() or this 
object's destructor is called (or until some kind of fatal error 
occurs). 

言います。あなたのプログラムを生かしておくために何かをしなければなりません。たとえば、start_async()の代わりにサーバーのstart()を呼び出します。

+0

'start()'を使ってみましたが、同時に多くの接続を処理することはありませんが、代わりに順番に実行します。 'on_connect'メソッドについての私の理解によれば、すべての接続試行のために新しいスレッドを開始すべきですが、そうではありません。どうして? – pr0gma

+0

多くの接続を同時に処理します。なぜそれはないと思いますか? –

+0

'on_connect'関数の中に挨拶メッセージと' while(true); 'を入れようとしましたが、その後10人のクライアントにサーバーとの接続を試みました。彼らは順番に(奇妙なことに、各接続の試行は、前のサービスから約10秒待たなければなりませんでした)。私は挨拶メッセージが次々に印刷されることを期待しましたが、それは起こりませんでした。 – pr0gma

関連する問題