計算サーバーとクライアントを作成しなさい。サーバーは起動時にクライアントからの接続ポートを引数として
受け取り、そのポートで接続を待つ。クライアントからの接続があると、新しく計算用のスレッドを起動する。
計算スレッドが起動している時に別のクライアントが接続されると、別のクライアントが使用中であるエラーメッセージを
送信するスレッドを起動する。
サーバーは、double型の数値を1つ保持しておき、クライアントが接続されるとその数値をクライアントに
送る。クライアントはキーボードから入力された「+10」とか、「/4」といった計算式を受け取り、「++19」や
「@5」といった記述間違えでないことを確認後、サーバーに送る。サーバーは送られてきた計算式に従って
計算し、解答を保持すると共に、クライアントに送り返す。
+などの記号がなく、直接数値の場合は、その数値に置き換える。
クライアントはキーボードから「quit」もしくは「exit」(大文字小文字は区別しない)と入力された場合は
サーバーとディスコネクトする。
- クライアントは「+10」などをキーボードから入力するが、これは1文字ずつ処理する必要は無く、記号と数値の分割にはStreamTokenizerを使用する。
- 割り算を表す「/」は、StreamTokenizerではコメント文字なので、通常文字に設定しなおす必要がある。
- 「quit」などの文字は大文字小文字を区別しない。このためStreamTokenizerの小文字に変換してトークンに区切るようにすると便利である。
- クライアントで入力文字のチェックを行うので、チェック後入力された文字をサーバーに送るのではなく、記号と数値に分けて転送するとサーバーの処理が簡単になる。
- 数値置き換えは記号が無いので、工夫が必要となる。
- サーバーはクライアントが接続してくると、新しくスレッドを起こす。
- 1つの計算スレッドが終了すれば新しくクライアントを受け入れられるようにするが、このフラグはServerSocketのacceptしているスレッドと、計算スレッドが参照するため、同期させる必要がある。
- サーバーはクライアントが突然正規の終了処理をせずに落ちても、サーバーは落ちてはならないようにする必要がある。
|