0

ソケットとマルチスレッドに慣れるために、単純なクライアント/サーバーの例に取り組んでいます。クライアント側に 2 つのボタンを備えた単純な GUI があります。1 つ目は n ビット サイズの素数を生成し、2 つ目は最初の操作をキャンセルします (8000 ビットの素数を作成するには時間がかかるため)。

ユーザーが「生成」を押すと、クライアントは新しいスレッドを作成します。このスレッドは 2 つの新しいスレッドを作成します。1 つはサーバーへの接続を確立するためのもので、もう 1 つは GUI が「素数の生成を停止する」ことを要求しない限り何もしないためのものです。

サーバーは単に接続をポーリングします。接続が確立されると、新しいスレッドを作成して素数を生成し、その素数をクライアントに返します。

ここで私は概念的な問題を抱えています。クライアントに「プライムの生成を停止する」ボタンを実装したい場合、どうすればよいですか? 私の最初の考えは、2番目のスレッドを使用して同じソケットを使用してサーバーに接続し、「停止」するように指示することです。サーバーにクライアント要求の所有権を与えるにはどうすればよいですか? サーバーに「オーケー、クライアント A、私は現在大きな素数を作成するスレッドを実行していますが、キャンセルを要求していることがわかります」と言うにはどうすればよいでしょうか。サーバーにリクエストに対する所有権を与えるにはどうすればよいですか?

4

1 に答える 1

0

開始する 1 つの方法は、クライアント サーバー通信用に独自の要求および応答メッセージを設定することです。サーバーへのすべての新しい接続要求は、サーバー サイトで専用スレッドを作成/使用するため、素数が計算されるまでサーバーとの通信を継続し、ユーザーが停止ボタンをクリックした場合に STOP シグナルを渡すことができます。以下は、実装を進める方法の概要です。

T1 - スレッド 1

クライアント

  • T1(2 つのボタンを持つ UI の場合) 開始ボタンで -> ServerSocket を呼び出し、メッセージ「START PRIME n」を渡します 停止ボタンで -> ServerSocket を呼び出し、メッセージ「STOP PRIME n」を渡します

    Request Messages 
    
    i.  START PRIME n
    ii. STOP PRIME n
    

サーバ

  • ポート 5000 で T1 (クライアント要求をリッスン) クライアントからの要求時:

    1. スレッド プールサンプル 章から新しいスレッドを割り当てる

      Response Messages 
      
      i.  PRIME VAL <result>
      ii. STOP PRIME COMPLETE
      
    2. スレッド T1 はリッスンに戻ります

お役に立てれば!

于 2013-05-05T20:23:38.147 に答える