2016-08-20 7 views
0

私はchat :: asioをチャットのサンプルアプリケーションを使って学習しています。この例では、すべての参加者にメッセージを送信します。私はそれにプライベートチャット機能を追加したい(プライベートチャットをリレーとしてサーバーを使用して)。Boost :: Asioチャットのサンプルプログラム---プライベートチャットの実装方法

質問を単純にするため、AとBの2つのクライアントしか持っていないとしましょう。 AとBのソケットが接続されているマップに保存していたと思いました。その後、AがBと話をしたい場合、私はAのソケットのためのマップを検索し(したがってBのソケットを見つける)、メッセージをBのソケットに送ります。

しかし、これはかなり難しい作業です。それを行う方法はありますか?

+0

これは難しい作業ではありません。あなたは、より多くのドキュメントを読んで、インターネット上の例をチェックする必要があります。 Googleは多くの使用例を吐き出しています。あなたが言及したことから始め、チャットルームを試してみてください。 1台のサーバーで複数のクライアント。その後、あなたはboost :: asioによく似ています。 – Blacktempel

答えて

1

確かに。あなたは、C++ 11の例を見ている場合は、次の操作を行うことができ

  1. register_client機能を追加chat_server.cpp
  2. にchat_participantのために新しいプロパティ(ID)を追加します。 chat_client.cppは、各クライアントにIDを登録します。
  3. 変更chat_room::deliver

    for (auto participant: participants_) { 
        if(participant->id == recipient_id) 
         participant->deliver(msg); 
    } 
    

で次のコード行以上があなたにこれを行う方法の一般的なアイデアを与えることです。

うまくいけばうまくいきます。

+0

ありがとうございます。意味あり。 – FlatWorld

+0

私がclient.cppを変更しないとどうなりますか?これはサーバー側でのみ行うことができますか? std :: mapを作成して2つのクライアントのソケットをマップに保存することはできますか?私はソケットが整数だったので、通常のソケットアプリケーションでこの種のアプローチを使用しました。しかし、ソケットがオブジェクトなので、Boost ASIOでそれをするのは難しいようです... – FlatWorld

+0

ちょうどコードをもう一度チェックしました。 std :: mapに問題がありました。私はそれを訂正した。今はプライベートチャットをサポートしています! – FlatWorld

関連する問題