1

サーバーから生成されたスレッドを介して複数のクライアントにサービスを提供できるようにするクライアント/サーバー プログラムがあります。現在、プログラムはサーバーと通信するだけですが、クライアントが別のクライアントと通信できるようにプログラムを再設計したいと考えています。これを設計するという点では、正しい方向性を知るにはあまり多くの経験がありません。最初はサーバースレッド経由の通信を考えていましたが、別のクライアントが通信を確立したいということをそのスレッドのクライアントに通知する方法がわかりません。

たとえば、cli A から cli N に通信したい場合:

Cli A <---> SerThread A <------> Main Thread <------> SerThread N <---> Cli N

Cli A が Cli N と通信する必要があることを Cli N に通知する方法がわかりません。

クライアントは、ソケットから読み取るまで、別のクライアントがそのソケットと通信しようとしていることを知りません。したがって、Cli N が送受信を行うまでユーザー入力を待機している状態にある場合、それはわかりません。通信が待機していることをクライアントにすぐに通知する方法が必要です。

考えれば考えるほど混乱するので、これを適切に設計する前に、おそらく何らかのガイダンスが必要です。

4

2 に答える 2

0

ビギナー向けのソケットプログラミングのバイブルであるBeej's Guide to Networkを読むことを強くお勧めします。そこにはたくさんの例があり、すべての機能を順を追って説明しているので、時間をかけてすべてを理解することができます. このガイドには、実際に発生している問題を探すことができるクライアント サーバー接続の実際の例も含まれています。このガイドを読んで、このようなことを学びました!それが役立つことを願っています!=)

于 2013-11-12T13:21:08.037 に答える
0

さて、スイッチのように機能させることができます:)サーバーを介して2つのクライアント間の接続を確立したいと思いますか?その場合、各クライアントにシリアル番号を付与する必要があります。次に、検索しているクライアントの情報を使用して、クライアントからサーバーに「要求」を送信します。シリアルナンバー入りのパケットを意味します。その後、サーバーは、接続されたクライアントのリストに情報をブロードキャストできます。クライアント側では、クライアントはサーバーのおかげでシリアル番号を受け取ります。クライアントが受信したシリアル番号が自身のシリアル番号と一致する場合、クライアントはサーバーに true を返します。そうでない場合は、false を送信します。次に、そのクライアントの検索が行われるとき、サーバーはそのクライアントの場所をすでに認識しており、その特定のクライアントだけにメッセージを送信します。

于 2013-02-17T15:24:00.030 に答える