2012年11月1日木曜日

2012/10/31: 授業実施・処理(gw)、卒研中間発表会

●授業実施・処理(gw)
・gw
昨夜用意したJavaのWebサーバプログラムおよびC#の演習用ツールの動作をオフィスのPCで確認し、授業用Webページに掲載した。また、配布資料としてWebサーバプログラムのソースコードのハードコピーを用意した。
ソケットプログラミングに関するスライド資料を点検して若干の修正を加え、PDF版を作って授業用Webページに掲載した。また、配布資料として縮小PDF版のハードコピーを用意した。

2限目に授業を実施した。まずスライド資料でJavaによるソケットプログラミングを説明した。次にWebサーバプログラムのソースコードを頭から1行ずつ解説しながら学生にEclipseに入力させた。これが半分弱のところで時間切れになったので、残りは次回に解説する。

受講生2名に訊いてみると、うち1名は別の授業でRubyによるWebサーバ作りをやったことがあるということであった。この学生が言うには、復習になるしJavaプログラミングの勉強にもなるので今回の内容に不満はないとのことであったが、全体として同じことの繰り返しになるようではよくないので、あとの展開をもう一度検討しておく必要がある。
どうもgwの計画は悩ましいが、1年目の授業であるので多少探り探りなのは仕方ない。

授業中の演習において "~\r\n" という文字列リテラルを入力する箇所があったが、受講者の使っているMacBookのEclipseにおいてはバックスラッシュの入力がうまくできないようであった。検索すると[Option-¥]で解決するような話も出てくるが、自分自身はMac OSでプログラミングをしたことがないので、それで対処できるのかどうかわからない。とりあえずの回避として "~" + (char) 0x0d + (char) 0x0a として入力させた。

授業後、スライド資料に授業中の板書の一部を反映し、授業中に見つけた不備を修正した。また、上記の文字列リテラルの入力について、Webサーバプログラムのソースコードにコメントとして記載した。
これらの改訂版は、後述の演習用ツール(C#プログラム)とともに授業用Webページにあらためて掲載した。

●卒研中間発表会
3限目にKくん、Sくんの中間発表を聴いてコメントした。
スケジュールは厳しくなってきているが二人とも頑張っている。

●C#によるソケットプログラミング
gwのために用意した演習用ツールは、他の授業や研究においてもテストツールとして使えそうなので、プログラム内部の様子が頭に入っているうちに完成度を上げておくことにした。

.Net FrameworkのクラスSocketやTcpClientには接続状況を示すプロパティConnectedがあるが、接続が切れても送信処理をするまではこのプロパティの値は更新されないため、ただプロパティを参照しただけではその時点の本当の接続状況は知りえない。これがプログラミング上ちょっと面倒の種になった。DelphiのClientSocketだったら、切断したことはOnDisconnectイベントですぐに判るのに。
いろいろ試したところ、ブロッキングモードで動かしているのにメソッドReceiveないしReadが何も受信せずに戻ったら、接続は切断されていると見なして良さそうであることに気付いた(すっかり失念していたが、冷静に思い起こせばJavaのReaderも同様である)。
そこで、Socketのラッパークラスを作り、受信用メソッドの中でメソッドReceiveを呼び出して、Receiveが何も受信せずに戻ったときには自動的にメソッドShutdownおよびCloseを呼び出すようにした。このやり方なら、受信待ち中に切断が起こったらすぐにConnectedの値が更新されることになる。このラッパークラスとBackgroundWorkderを組み合わせたところ、演習用ツールはほぼ満足できるレベルの使いやすさになった。
思いのほか時間はかかったが勉強になった。swBのツールも、Windows XP以降に対応していないDelphi 6からC#に移植することを兼ねてから検討していたが、今回の件で移植できる見通しが立った。

この他に、受信データを表示するときのエンコーディングを受信処理後に変更する仕組みなどを作った。残作業としては送信データの改行コードを指定する仕組みの作成がある。

●その他
K'sLifeの試験実施調査に対してda2の分のみ未回答であったので回答した。
机のまわりにまた書類が溜まりはじめたので整理した。

0 件のコメント:

コメントを投稿