next up previous contents index
Next: シンプルクライアント Up: サンプルクライアント Previous: sampleclientの使用法   Contents   Index


サンプルクライアントの全体構造

sampleclient の構造は単純である. clientが行う処理は概ね次のようになる:

  1. UDPソケットを開き,サーバのポートに接続する. (init_connection())
  2. read-write ループに入り,次の2つの処理が並列に実行される.
並列実行を実現するために,sampleclientselect() 関数を用い ている. この関数は,単一プロセス内で複数のソケットとストリームからの入力を待つ ことを可能にする. 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