■課題2:inetdを使用するサーバプログラムの作成
サンプルプログラム(1)はサーバ(server.c)をinetdから起動することで、サーバはクライアント(client.c)の標準入力から入力された文字に対応するキーワードをクライアントに返すプログラムである。サンプルプログラム(1)を自分の実験環境で動作するようにし、実行結果を示すとともに、プログラムの中で使われている関数(Connect,Disconnect, Send Data, Recv Dataなど)の動作を説明し、サーバ・クライアント動作全体をフローを示して説明せよ。
<<実行結果>>
[nw0417:~/work/jikken2/tcpip] j04017% client Connected. Input Keyword = warning: this program uses gets(), which is unsafe. 123 Keyword = [123] / Data = [456] Input Keyword = yama Keyword = [yama] / Data = [kawa] Input Keyword = xyz Keyword = [xyz] / Data = [XYZ] Input Keyword = shiro Keyword = [shiro] / Data = [kuro] Input Keyword = xxxx Keyword = [xxxx] / Data = [yyyy] |
[関数の動作説明]
・Connect
ソケットを生成し、コネクションの準備をするための関数。
・Disconnect ソケット接続を解除し、コネクションを終了するための関数。 ・SendData 入力されたデータをサーバに書き込むための関数。 ・RecvData データの結果をサーバから受け取るための関数。
・GetLineFromPeer クライアントから入力されたデータを受け取るための関数。
・GetKetbordData SendDataから送られてきたデータを比較し、一致するデータがあると変換され、当てはまるデータが存在しない場合は空を出す。
以下の図1にてサーバー、クライアントの動作を表す図を示す。
図1.サーバー、クライアントプログラムの動作全体フロー