2016-10-26 7 views
-1

私が取り組んでいるアプリケーションでは、何百ものクライアントがUDP経由でサーバーに接続します。クライアントが終了することを決定するまで、各クライアントのソケット接続は開いたままです。複数のudp接続にboost asioを使用するにはどうすればよいですか?

非同期udpサーバー用のboostサンプルコードをhttp://www.boost.org/doc/libs/1_35_0/doc/html/boost_asio/tutorial/tutdaytime6/src.htmlにダウンロードしました。コードから

、物事のカップルは明確ではありません。

  1. 各接続がクライアントから作られているように、私が入ってくるクライアントのIPを保存したいと思います。しかし、コードから、この論理をどこに置くことができるのかは分かりません。

  2. このコードは、一度に1つのクライアントにしか対応できないようです。私の場合、多くの同時接続があり、ソケットは各接続ごとに有効に保たれなければなりません。このコードをどのように拡張しますか?よろしく。あなたは、コードを変換io_serviceに派遣し、複数のスレッドを追加して、新たなパケットを扱う上でのことを確認し、それに対処するための新しいクライアント・ハンドラ・インスタンスを作成する必要があります。これは、remote_endpont_

  3. に保持されている

+2

実際にUDP接続などはありません。存在しない問題を解決しようとしているようです。 –

答えて

1

各接続がクライアントから作られているように、私は、着信クライアントのIPを保存したいと思います。しかし、コードから、この論理をどこに置くことができるのかは分かりません。

このコードには接続の概念はありません。接続が何であるかを知っているコードを書いているなら、どこかの受信データグラムが既存の接続の一部であるか新しいものを確立するかを決めるでしょう。それはあなたがその論理を置く場所です。

このコードは、一度に1つのクライアントにしか対応できないようです。私の場合、多くの同時接続があり、ソケットは各接続ごとに有効に保たれなければなりません。

UDPソケットが接続に関連付けられているように見えます。これはそうではありません。 UDPは接続については何も知らず、これはまったくあなたのコードの特徴です。 UDP実装はこれらの接続について全く知らないので、受信したすべてのデータグラムだけを提供します。 TCPのような接続指向のプロトコルがあるような各接続のためのソケットはありません。

接続が必要で、何らかの理由でUDPなどのコネクションレスプロトコルを使用したい場合は、すべての接続ロジックが必要です。ソケットは1つしかなく、一度に1つのデータグラムしか受け取らないが、それをサポートするコードを書く限り、任意の数の同時接続を維持することができる。

関連する問題