差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 最新のリビジョン 両方とも次のリビジョン | ||
lecture:apro:2019:ex2 [2019/11/12 10:03] sano |
lecture:apro:2019:ex2 [2019/11/26 10:45] sano ↷ lecture:apro:private:ex2 から lecture:apro:2019:ex2 へページを移動しました。 |
||
---|---|---|---|
行 1: | 行 1: | ||
===== 応用プログラミング ex2 演習課題 | ===== 応用プログラミング ex2 演習課題 | ||
- | 後半の演習の進め方については、[[..: | + | 後半の演習の進め方については、[[..: |
==== 1. sys.argv でコマンドライン引数を使う | ==== 1. sys.argv でコマンドライン引数を使う | ||
行 19: | 行 19: | ||
37 | 37 | ||
</ | </ | ||
+ | |||
=== 1-2. echoServer.py === | === 1-2. echoServer.py === | ||
- echoServer.py を修正し、コマンドライン引数でサーバのポート番号を指定できるように修正しなさい。 | - echoServer.py を修正し、コマンドライン引数でサーバのポート番号を指定できるように修正しなさい。 | ||
行 25: | 行 26: | ||
実行例:(^C は Control+C での強制終了) | 実行例:(^C は Control+C での強制終了) | ||
< | < | ||
- | (aprog) | + | (aprog) |
port = 50007 | port = 50007 | ||
^C | ^C | ||
- | (aprog) | + | (aprog) |
port = 1234 | port = 1234 | ||
^C | ^C | ||
- | (aprog) | + | (aprog) |
Usage: echoServer.py [port] | Usage: echoServer.py [port] | ||
</ | </ | ||
行 43: | 行 44: | ||
<code Python> | <code Python> | ||
</ | </ | ||
+ | |||
=== 1-3. echoClient-ex.py === | === 1-3. echoClient-ex.py === | ||
- | < | + | < |
- | - echoClient.py を修正し、コマンドライン引数でサーバのホスト名(IPアドレス)、送信文字列、ポート番号を指定できるプログラム <wrap em> | + | - echoClient.py を修正し、コマンドライン引数でサーバのホスト名(IPアドレス)、送信文字列、ポート番号の順に指定できるプログラム <wrap em> |
- | - ただし、ポート番号の指定は省略できるものとし、引数で与えられない場合はポート番号を 50007 とする。 | + | - ただし、最後の引数となるポート番号の指定は省略できるものとし、ポート番号が引数として与えられない場合はポート番号を 50007 とする。 |
- | - また、引数が2つ未満でホスト名と送信文字列が与えられない場合、または、4つ以上の引数が与えられた場合はコマンドの利用方法を表示して終了すること。 | + | - また、引数が2つ未満でホスト名と送信文字列の両方が与えられない場合、または、4つ以上の引数が与えられた場合はコマンドの利用方法を表示して終了すること。 |
- | - <wrap em> | + | - <wrap em> |
実行例:(サーバは送信文字列を2倍して返信) | 実行例:(サーバは送信文字列を2倍して返信) | ||
< | < | ||
- | (aprog) | + | (aprog) |
localhost あいうえお 5007 | localhost あいうえお 5007 | ||
Send あいうえお | Send あいうえお | ||
Received あいうえおあいうえお | Received あいうえおあいうえお | ||
- | (aprog) | + | (aprog) |
127.0.0.1 hello 5007 | 127.0.0.1 hello 5007 | ||
Send hello | Send hello | ||
Received hellohello | Received hellohello | ||
- | (aprog) | + | (aprog) |
127.0.0.1 hello 50007 | 127.0.0.1 hello 50007 | ||
Send hello | Send hello | ||
Received hellohello | Received hellohello | ||
- | (aprog) | + | (aprog) |
Usage: echoClient-ex.py < | Usage: echoClient-ex.py < | ||
- | (aprog) | + | (aprog) |
Usage: echoClient-ex.py < | Usage: echoClient-ex.py < | ||
</ | </ | ||
行 72: | 行 74: | ||
==== 2. 繰り返しの送受信 ==== | ==== 2. 繰り返しの送受信 ==== | ||
- | < | + | < |
- echoServer.py は、クライアントとの通信を1回行うごとにプログラムの実行を終了するため、続けて通信するためには再び echoServer.py を起動し直す必要がある。 | - echoServer.py は、クライアントとの通信を1回行うごとにプログラムの実行を終了するため、続けて通信するためには再び echoServer.py を起動し直す必要がある。 | ||
- | - echoServer.py を修正し、1つのクライアントとの送受信を完了しても終了せず、再び受信待機(Listen)状態に復帰し、引き続き次のクライアントと通信を行うことができるプログラム echoServer-ex.py を作成しなさい。 | + | - echoServer.py を修正し、1つのクライアントとの送受信を完了してもプログラムを終了せず、再び受信待機(Listen)状態に復帰して引き続き次のクライアントと通信を行うことができるプログラム echoServer-ex.py を作成しなさい。 |
- | - <wrap em> | + | - <wrap em> |
実行例:(^C は Control+C での強制終了) | 実行例:(^C は Control+C での強制終了) | ||
< | < | ||
- | (aprog) | + | (aprog) |
port = 5001 | port = 5001 | ||
Connected by (' | Connected by (' | ||
行 94: | 行 96: | ||
</ | </ | ||
==== 3. ファイルの内容を送信するサーバ htServer.py ==== | ==== 3. ファイルの内容を送信するサーバ htServer.py ==== | ||
- | <WRAP todo 100% center> | + | |
- | | + | - このようなサーバプログラムhtServer.py を作成し、適当なクライアントプログラムで動作を確認しなさい。 |
テキストファイルの例: | テキストファイルの例: | ||
行 104: | 行 106: | ||
実行例: htServer.py | 実行例: htServer.py | ||
< | < | ||
- | (aprog) | + | (aprog) |
port = 50001 | port = 50001 | ||
Connected by (' | Connected by (' | ||
行 116: | 行 118: | ||
実行例: echoClient-ex.py | 実行例: echoClient-ex.py | ||
< | < | ||
- | (aprog) | + | (aprog) |
localhost GET 50001 | localhost GET 50001 | ||
Send GET | Send GET | ||
Received これは server.txt ファイルの中身です | Received これは server.txt ファイルの中身です | ||
- | (aprog) | + | (aprog) |
localhost get 50001 | localhost get 50001 | ||
Send get | Send get | ||
Received get is not a command | Received get is not a command | ||
</ | </ | ||
- | </ | ||