2017-02-17 8 views
1

私はC++が新しく、私はブーストで自分のサーバーをコーディングし始めました。私はウェブ上と公式の文書の多くの例に従っています。しかし、私は何かを見つけました(多分私は良い質問をしません)これについて - 特定のクライアントとのコミュニケーション。これにより、私はthat-を意味>C++が特定のクライアントと通信するブーストasio

古い質問:

サーバーの起動とconnection-待つ>クライアントは、(1)サーバがクライアントを受け入れ、async_read

を開始> TCP-を介して接続します3つのクライアントも接続すると思います - >

私のサーバーにもクライアント(2)または(3)が書き込まれますが、 は書き込まれません。

私はひどく

自分を表現する新しい問題:クライアントがサーバにデータを送信するとき(アンリアルエンジンでカスタムクライアントを4)彼は書き、それを読むことができ、

私のサーバーの作業罰金私のクライアントに何の問題もありません。私は彼にデータを送る必要なく、私が望むクライアントに話す方法を探します。例:

クライアント1サーバへの書き込み - >データはサーバに送信され、次のアクションを開始します>特定のクライアントに書き込みます。

より具体的な例:1は、クライアント10に要求を送信したい

クライアント、サーバーアクション«アクション、IDクライアント»(リクエスト、10)、サーバへのクライアント1の書き込みは、彼がする必要があることを知っているので、クライアント10と話し、要求を送信する。

私の問題はクライアント側ではなくサーバー側で発生します。

誰かが私に指示、例、または単に説明を与えることができれば、それはかなり簡単で基本的なものは分かりません。将来の答えをありがとう。

EDIT:

誰かが私のように苦労している場合(私はそれが簡単だ知っているが、我々が知っていることはありません:pは、多分それが誰かを助けることができる)、ここでの答え。私はIT-を設定するなど、私は、接続の書き込み、送信するために使用するファイル、

std::map<int, tcp::socket> playerRemote; 

の内側にこれを含める

>

​​

socket->

boost::asio::async_read(playerRemote.at(id_to_use) 
を使用

質問が解決しました。手伝ってくれてありがとう!

+0

これについての例はいたる所です!ここをクリックしてください:http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/examples/cpp11_examples.html –

+1

問題は何ですか? 3つのソケットが受け入れられ、格納されていて、 'async_read'を介してデータを受け取るのを待っているなら、特定のクライアントに接続されたソケットで' write'または 'async_write'を呼び出すことができます。 –

+0

特定のクライアントにデータを送信する場合は、IPv4/6アドレスや名前[...]とともに 'std :: map'に格納してデータを送信することができます。そのような単純な。 – Blacktempel

答えて

1

サーバプログラムがacceptを実行するたびに、新しいクライアントに新しいソケットが追加されます。

普通のプラクティスは、この新しいソケットで作成して初期化する何らかのオブジェクトを持つことです。そして、あなたはそのオブジェクトをなんらかの構造にします。セット、地図、ベクトル、リストのように何か本当に。

特定のクライアントが必要な場合は、そのクライアントのデータ構造を検索します。マップまたはunordered_mapを使用した場合は、使用したキーによってすばやく取得できます。

これでメソッドを呼び出すことができるクライアントオブジェクトが完成しました。独自のバージョンの "send"と同様に、クライアントごとのバッファに追加できます。 Boost ASIOでは、メッセージの送信が非同期であるため(名前のすぐそばにあります)、すぐに送信できない場合があります。

Boost ASIOチャットのサンプルアプリケーションはこれについて良いです。

The Quantum Physicistがコメントに入れたリンクを見てください。特にこの1つ:http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp11/chat/chat_server.cpp

+0

ありがとう!私はすでにソケット内のマップをマップに入れようとしていますが、エラーが出ます。私は私の質問を編集して、どうやってやっているのか、何がエラーなのか、もう一度感謝します! – GabrielProL

+0

私はついにそれを手に入れました!私はそれが簡単な仕事であっても、答えを使って自分の投稿を編集します。多分誰かがそれを使うでしょう。もしあなたが私のやり方についてある程度の精度を持っていれば、私はすべての提案に開放されています!あなたの答えを共有してくれてありがとう! – GabrielProL

関連する問題