2004年10月19日

ネットワークプログラミング

大学の実験で変態的な挙動をする(と指導書に書いてあった)HTTPサーバを作りました。

要はリクエストされた文章を返すのではなく、簡単な数当てゲームを実現するサーバです。どこが実験なのだろうと言う感じで教室に集まりただもくもくとプログラムするだけでした。担当の教官も来ないし。来てもリンゴ先生だしなー。
指導書も適当だし。この変数については後述と書いてあるのに、そのあと一回も触れられていなかった。なんてこったい。

感想とあとの自分のためにメモメモ

・慣れていないc言語が大変
・特に文字列の扱いが面倒すぎじゃないですか。
・charが混じっていたりすると……。
・sscanfを知らなかったので語句解析が大変なことになってしまっていた。
・sscanfは涙が出るほど楽だけど文字列に入れようとすると、変な挙動をする。
・具体的には
  str = "/1234_HI.html";
  sscanf(str,"/%d_%s.html",%int,s);
とかやると、sが"HI.html"となってよけいなモノがつく。K&Rの教科書の記述だとうまくいきそうなんだけど、cygwinのgccとかでもだめっぽい。strstrとヌル文字で強引に消したけど、どうにかなりませんか。
・おしえてエロい人。
・ポインタとヌル文字を使えばかなり強引なことができるんだなあと知る。でも時々何やってるのかわからなくなる。

・前はJavaやっていたのでメモリ管理をよく忘れてしまう。
・ローカルな変数のポインタを渡しちゃったり。
・でmallocは忘れなくなったけど、freeを一回も使っていないことに気がついた。駄目じゃん。まあ、最近のパソコンはメモリでかいし……。
・レポート提出までになおしとかんと。
・ガーベッジコレクションプリーズ!
・となるとC#か。でも.NETだしなあ。D言語もいいらしいけど。

・とりあえずポインタはだいたいOK。構造体が絡むと.と->をよく間違えるけど。
・整数の変数にvoidのポインタの実体を代入するときはまず整数のポインタにキャストしてから実体参照しなければならないのね。しらなかった。
・そもそもvoidのポインタという名称はどうだろう。

・スレッドはAPIなのね。いや、当たり前っちゃ当たり前なんですが。考えたこと無かった。
・同期を考えているとあっぱらぱーになりそう。
・変な状況で上手く動くのか不明だなあ。
・でもセマフォはOKだ。変数名つけるときにはGETとPUTをつけるとわかりやすいような気がする。

・Visual C++でつくったのだけど使い方がよくわからない。優しさが感じられない。このソフト。
・あまり大きくないとは云ってもちゃんと関数とか分けなかったので非常にわかりにくいソースになってしまったような気がする。
・というかどう分けるべきかわからなかった。
・経験が足りないんだろうな。
・あと脳内だけでなく、簡単なのでも仕様書はつくるべきだった。
・コメントもまめに書こう。

・やっぱりできるならオブジェクト指向言語でやりたい。C++を勉強するべきなのかもしれない。