Next: シンプルクライアント
Up: サンプルクライアント
Previous: sampleclientの使用法
Contents
Index
サンプルクライアントの全体構造
sampleclient の構造は単純である.
clientが行う処理は概ね次のようになる:
- UDPソケットを開き,サーバのポートに接続する.
(init_connection())
- read-write ループに入り,次の2つの処理が並列に実行される.
- ユーザの入力を標準入力(通常,キーボード)から読み,それをサー
バへ送信する(send_message()).
- サーバからセンサ情報を受信し(receive_message()),それ
を標準出力(通常,コンソール)へ出力する.
並列実行を実現するために,sampleclient は select() 関数を用い
ている.
この関数は,単一プロセス内で複数のソケットとストリームからの入力を待つ
ことを可能にする.
select() が呼び出されると,ソケットかストリームのひとつが入力デー
タを得るまで待ち,度のソケット又はストリームがデータを得たかをを伝える.
select() のより詳しい使用方法については,manページやマニュアルを参
照してもらいたい.
sampleclientにおける重要なヒントは,クライアントがサーバからセンサ
情報を受信すると,クライアントはサーバのポート番号を変更しなければなら
ない,ということである.
これは,サーバがクライアントからの init コマンドを受信すると,新し
いポートをクライアントへ割り当てるためである.
この処理は,"client.c" 内の次のステートメントで行われている:
printf( "recv %d : ", ntohs(serv_addr.sin_port));
+ sock->serv_addr.sin_port = serv_addr.sin_port ;
buf[n] = '\0' ;
Hidehisa Akiyama
2004-11-21