応用プログラミング ex1 演習課題
0. はじめに
高橋先生担当の前半に引き続き、後半でもプログラミング言語として Python を用います。 Python のプログラミング環境も、前半から引き続き aprog コマンドを用いた仮想環境を利用します(前半第1回の準備)。
演習では、毎回の演習ページで指示された内容を順番に進めて下さい。基本的には、自分自身でプログラムの実行結果や内容を確認しながら演習を進めます。
幾つかの演習課題では、このような色付き枠が表示されています。 これらは、TAによるチェック課題です。 TAによるチェック課題が完了した時点で、Teams による TA予約を行って TAチェックを受けて下さい。 TAチェックを通過すれば、その課題は提出済みとして記録されます。
TAチェックの際、TAから幾つかの質問が行われる場合があります。課題が完了していてもTAからの質問に答えられない場合は、課題の提出が認められないこともあります。 その場合は、課題の内容を理解し直してから、再度TAチェックを受けて下さい。
また、このような色付き枠が表示されている課題もTAによるチェック課題ですが、提出は必須ではありません。 余裕のある人や興味のある人は取り組んで、TAチェックを受けてください。こちらの課題に対する可否は、原則として科目の評価には入りません。
Microsoft Teams の利用について
この科目では、オンラインでの講義配信やスライド・PC画面提示、演習中のTAによる課題チェックや質問の予約に Microsoft Teams を利用します。
一般チャネル:科目全般に関するお知らせ
科目全般に関する教員からのお知らせや各種アナウンスを投稿します。
各回演習用チャネル(☆ ex01-1125 など): 各回の講義パートの会議やアナウンス
演習回は後半のみの通し番号で ex01 から始まります。後半のチャネル名は前半と区別するため、先頭に星マーク(★/☆)が付いています。 開始時間になったら、まずはこちらのチャネルで開催される会議(オンラインの講義パート)に参加し、その後、指示に従って演習を進めて下さい。
各回用の質問チャネル(☆ ex01-質問チャネル など):各回の演習内容に関する質問
全般的な質問用チャネル:各回の内容によらない全般的な質問
講義や演習時間中であるかどうかに関わらず、いつでも質問を投げることが可能です。質問へは、教員、またはTAがオンラインで対応します。
各回の演習内容に関する質問は「☆ ex01-質問チャネル」などへ、科目全般に関する質問は「★ 全般的な質問用」チャネルに投稿して下さい。
これらのチャネルへ投稿された質問と回答は、この科目チーム全体に共有されます。 他の受講生にも有益と思われる質問投稿には、教員から「いいね♥」マークが付き、評価加点の対象となります。
必ずこの科目での質問方法に従って質問を投げて下さい。チャットでの直接質問や「悪い質問の例」のような質問には返答されないことがあります。
TAチェック予約用チャネル(☆ ex01-TAcheck など): 演習中のTA予約用
この科目の演習課題には、TAによるチェックが指示されているものがあります。 TAチェックを受ける場合は、このTAチェック予約用チャネルでTA予約をして下さい。 TAチェック予約の利用方法は、
- TAチェック予約チャネルに、「チェックを希望する課題番号」を投稿します。
- 自分の投稿に TA からの返信があったら、その返信元の TA の指示に従って下さい。
- 対応を受けた投稿には 対応したTAからの「いいね」マークが付き、対応が受け付けられたことがマークされます。
となります。原則として、予約受付順に対応を行いますが、課題番号によっては予約順とTA対応の順が前後することがあります。
1. ネットワーク環境を調べる
- 以下のコマンドを使って、自分が利用している計算機のネットワーク環境を調べなさい。
- コマンドが実行できない場合は、whereis コマンドを使ってコマンドのパスを調べ、フルパスで実行しなさい。
1-1.ifconfig
- ifconfig コマンドを使って、自分の計算機のIPアドレスとネットワークマスクの値を調べなさい。
1-2.hostname
- hostname コマンドを使って、自分の計算機のドメイン名のホスト部を調べなさい。
- hostname コマンドを使って、自分の計算機のIPアドレスを調べなさい。
1-3.host
- host コマンドを使って、ドメイン名 www.ryukoku.ac.jp の(DNSに登録されている)IPアドレスを調べなさい。
- host コマンドを使って、IPアドレス 133.83.80.10 の(DNSに登録されている)ドメイン名を調べなさい。
2.echoServer.py / echoClient.py の実行
2-1. 実行ファイルの準備
- ディレクトリ /roes/sample/sano/apro/ より以下の2つのソースファイルを、自分のホームディレクトリ以下の適当な場所にコピーしなさい。
- echoServer.py
- echoClient.py
- コピーした2つのソースファイルを Visual Studio Code などのエディタで開いて、ファイルの内容を確認しなさい。
2-2. 同じ計算機内で(自分自身と)の通信
- echoServer の起動
- ターミナル(シェル)を起動します。
- 起動したターミナル上で、次のように echoServer を起動します。
(aprog) sano@s01cd0542-161:~$ python echoServer.py
- echoClient の起動(と通信)
- echoServer を実行したものとは別のターミナル(シェル)を新たに起動します。
- ターミナルから次のように echoClient を実行します。
(aprog) sano@s01cd0542-161:~$ python echoClient.py Send b'Hello, world' Received b'Hello, world'
- echoClient を実行し echoServer とうまく通信できると、echoServer を実行したターミナル上にも文字列が表示されます。
2-3. 他の計算機との通信
- echoClient.py の接続先(リモートホスト名)を、IPアドレス 10.10.112.181 に変更しなさい。
- 自分の計算機(のターミナル)上で実行された echoClient.py が、指定された計算機の echoServer.py と通信できることを確認しなさい。
- 10.10.112.181 で実行されている echoServer.py の実行結果は、プロジェクター・スクリーンに常時表示しておきます。
2-4. 送受信する文字列の変更
2-4-1. クライアントからの送信文字列の変更
- echoClient.py を修正し、送信文字列 'Hello, world' の代わりに、自分の学籍番号と氏名を含んだ適当な文字列を送る msgClient.py を作成しなさい。
- TAの指定するサーバーに msgClient.py を用いて接続し、変更した文字列データを送信しなさい。
2-4-2. サーバからの返信文字列の変更
- クライアントプログラムから受け取った文字列をそのまま送り返すだけであった echoServer.py を修正し、
「受け取った文字列」と「自分の学籍番号」を含んだ適当な文字列を返信する replyServer.py を作成しなさい。 - echoClient.py と replyServer.py の間で送受信を行い、その動作を確認しなさい。
- replyServer.py を起動しなさい。そのサーバプログラム replyServer.py への接続に必要な情報をTAに伝え、TAのクライアントプログラムからの通信に自分の replyServer.py が条件通りに返信できることを確認しなさい。
2-5. 繰り返しの送受信
- 今回実行した echoServer.py は、echoClient.py との通信を1回行うごとにプログラムの実行を終了している。echoServer.py を修正し、1つの echoClient.py との送受信を完了してもプログラムを終了せず、再び、次の echoClient.py との通信を行うことができるようなサーバプログラム echoServer-ex1.py を作成しなさい。
- echoServer-ex1.py を起動し、そのサーバへの接続に必要な適切な情報をTAに伝えなさい。echoServer-ex1.py の一度の起動で、TAのクライアントプログラムからの複数回の接続を継続して繰り返し処理できることを確認しなさい。