A君とB君は、二人で協力してネットワーク型の音楽プレーヤーを作成している。この音楽プレーヤーは、遠隔からユーザーの指令を送信する「クライアント」と、ユーザーの指令を受信し、音楽プレーヤーのモードを変更する「サーバ」に分かれている。A君がクライアント、B君がサーバをそれぞれ別々に作成している。現在の二人の開発状況を以下に示す。
2人は上記の開発状況で、送受信が正しく実行できるか確認することにした。リスト1に音楽プレーヤーの仕様、リスト2にA君のプログラム、リスト3にB君のプログラムを示す。実際に試したところ、クライアントがモード遷移指令を送信しても、モードが遷移しないことが分かった。サーバ側のコンソールを確認すると、クライアントからのモード遷移指令受信時に、「IDかパスワードが一致しません」と表示し、また、サーバに受信データを表示するようにしたところ、モード遷移指令以外の値がおかしいことが分かっている。上記の情報から、何が原因でうまくいかないか推察せよ。
リスト1 音楽プレーヤーの仕様
本プログラムは、クライアントとサーバの2つの機器間で音楽プレーヤーのモード遷移を模擬するものである。
各モードの定義を以下に示す。
各モードの定義を以下の表1に示す。
モード | 名称 | |
---|---|---|
MODE_POWER_OFF | 電源OFFモード | |
MODE_IDLE | アイドルモード | |
MODE_PLAY | 再生モード | |
MODE_PAUSE | 一時停止モード | |
表1 モード定義表 |
モード遷移指令の定義とキーボード入力値を以下の表2に示す。
モード(変数名) | 名称 | キーボード入力値 | |
---|---|---|---|
ACT_POWER_ONOFF | 電源ON/OFF指令 | 0 | |
ACT_PLAY | 再生指令 | 1 | |
ACT_STOP | 停止指令 | 2 | |
表2 モード遷移指令表 |
通信方式は、TCPを使用する
クライアントからサーバに送信するデータを表3に示す。
変数名 | 説明 | |
---|---|---|
in | モード遷移指令の入力値 | |
id | ID番号 | |
password | パスワード | |
表3 クライアントからサーバへのデータ |
サーバからクライアントに送信するデータを表4に示す。
変数名 | 説明 | |
---|---|---|
▼▼Mode | モード | |
表4 サーバからクライアントへのデータ |
クライアントは、サーバへモード遷移指令を送信し、変更したモードを受信する。
コンソールからモード遷移指令を入力し、表3のデータをサーバに送信する。
サーバから表4のデータを受信し、コンソールにモードを表示する。
コンソールから「Ctrl+c」を入力し、プログラムを終了する。
サーバは、クライアントから受信したモード遷移指令に基づいて、音楽プレーヤーのモードを変更し、クライアントにモードを送信する。
クライアントから、表3のデータを受信する。
クライアントに表4のデータを送信する。
受信したユーザーIDとパスワードが定義したものと一致した場合は、下記に従ってモードを変更する。
プログラム実行時は、電源OFFモードから始まる。
電源OFFモードでのモード遷移を以下に示す。
アイドルモードでのモード遷移を以下に示す。
再生モードでのモード遷移を以下に示す。
一時停止モードでのモード遷移を以下に示す。
受信したモードから、下記をコンソールに出力すること。
コンソールから「Ctrl+c」を入力し、プログラムを終了する。
Copyright © ITmedia, Inc. All Rights Reserved.