[[TopPage]] > [[演習課題]] > 演習3-1-1

* MyServer.java [#m1348627]

MyServer.javaには,2つのclassがあります.
一つは,class ''ClientProcThread''で,もう一つはclass ''MyServer''です.

** (1)class ClientProcThread [#ncc7425d]
&color(black,#cccccc){''ソースコード''}; 9〜48行目

このクラスは,各クライアントに対する%%%ソケットを保持%%%し,クライアントから%%%データが送られてくるのを聞いて(Listen)%%%います.

プログラムは一つですが,接続してきたクライアント毎にこのクラスがスレッド((メインのプログラム(メソッド)とは非同期に動作するメソッド群.&br;通常,メインプログラムからメソッドAを呼び出すと,同期的=メソッドAが終わるまでメインプログラムは停止状態=に実行されますが,メソッドAをスレッド化して呼び出すと,メインプログラムとメソッドAは同時に実行されるようになります.))として生成されます(重要).

内部のインスタンス変数として,number, incoming, ... , myNameなどがクライアント毎に保持されています.
- number ... クライアントの番号&br;
接続されたクライアント毎に重複しない番号を割り当てて管理します.
- myName ... クライアントの名前.

インスタンスは,MyServerからClientProcThreadが呼び出されて,設定されます.
また,このクラスのインスタンスが生成されると''run()''メソッドが常時動いて,通信データをチェックして,データが届いたら,全員に配る処理をします.

**(2)class MyServer [#o10f3516]
&color(black,#cccccc){''ソースコード''}; 50〜112行目
- ''main()'' メソッド(79〜111行目)~
起動時に呼び出される処理です.
-- 81〜86行目: 最初に,必要な通信用の配列を確保します.
-- 93行目: サーバとして,ポートを開きます.そして,94行目の''while''以降で,クライアントからの接続を待ち受けます(''ServerSocket'').
-- 95行目: プログラムは,クライアントの接続があるまで,95行目の'''server'''.''accept()''で待ち続けています.~
クライアントからの接続があると,受け入れの処理(''accept'')を行います.
-- 99〜101行目:通信に必要な処理(inputとoutputのインスタンス生成)を行います.
-- 103〜104行目:上で説明したクライアント用のスレッド''ClientProcThread''を生成し,必要なパラメータを渡し,スレッドを非同期実行します.

- ''SendAll()''メソッド (62〜71行目)~
ClientProcThreadから呼び出されます.%%%接続している全てのクライアントにデータを送る%%%処理をします.~
ClientProcThreadは,一つのクライアント情報しか持っていないので,全員情報を持っているclass MyServerからデータを送っています.


- ''SetFlag()''メソッド (74〜76行目)~
ClientProcThreadから呼び出されます.もし,ClientProcThreadが終了したとき(通信が切断してしまったとき)は,''flag''を''false''にします.~
flagがfalseだと,SendAllではそのソケットにデータを送りません.


** 課題 [#wa29fa0d]

+ MyServer.javaファイルをコピーして,''MyServer2.java''を作成し,クラス名も''MyServer2''にしてください.&br;&br;
+ 現在の''MyServer''プログラムでは,クライアントとサーバの接続が確立したときに
 Hello, client No.1 ! Enter 'Bye' to exit.
と表示されていますが,これを,
 1
に変更してください.(番号だけ出力するようにします.)
に変更してください.(クライアントの番号だけ出力するようにします.)


''ヒント'':&br;&br;
%%%クラス名変更%%%は,プログラム中にある&color(red){''すべての''};''MyServer''という文字列を,''MyServer2''にする必要があります.

&size(16){[[&ref(http://yoslab.net/netprog/next.gif,nolink); 次の演習(3-2)>演習3-2 ネットワーク対戦ゲームクライアント]]};

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   一覧 単語検索 最終更新     最終更新のRSS