第 6 章 クライアントソフトウェアの設計と開発
6.2 クライアントソフトウェア担当機能の開発
6.2.5 サーバーと通信処理モジュール
通信処理モジュールについて、筆者はイテレーション1フェーズまで開発を行った。主に
QTcpSocketに関するAPIを使って、基本機能を実装した。使用するアドレスはIP version4
のアドレスである。通信プロトコルは TCP、UDP の二種類あるが、今回情報量はすくなく ても、特に送信ミスが発生してしまう場合、MeeGoデバイス間でデータ同期することができ なくなるため、TCPを用いることに決定した。
◆ソケット通信における通信の流れ
通信処理機能の開発の前提知識として、ソケット通信における通信の流れを説明する。
ソケット通信のモデルはクライアントサーバーモデルとなっており、サーバーはクライア ントからの接続要求を待ち、クライアントからの接続要求があると、それを受けて通信が 接続される。通信接続後はクライアント、サーバーの一方が受信待ちの状態にある場合に、
相手から何らかの要求が送信された時に、これを受け付けることができる。これをどちら かが通信を切断するまで行われる。
ソケット通信における具体的な通信の処理の流れを図6-12に示す。
図 6-12 ソケット通信処理の流れ
◆シグナルとスロットを用いた非同期通信の実装
signal/slot[21]のメカニズムは Qt の最も中心的な特徴である。シグナルはある特定 のイベントが起こった時に発信される。Qtのウィジットはすでに定義されている多くの スロットをもっているが、通常はサブクラスを作成して自分自身で定義したシグナルを 追加する。スロットは特定のシグナルに反応して実行される関数である。スロットも同 じようにサブクラスを作成して自分自身で追加することによって、反応したいシグナル だけを扱うことができる。
今回はQt の QTcpSocketクラスが提供する非同期モードの処理を用いて、非同期通信を
実現させた。具体的にsignal/slotを用いて、非同期モードの処理を実装した。シグナルと スロットによるオブジェクト間通信を図6-13に示す。シグナルとスロットの通信はQt
のconnectメソードを利用することで実現された。
例えば、Socketクラスのconnected は、最後に実行された時点での Socket の接続状態を取
得する。NetworkクラスはhandleStreamを呼び出して、socketの接続の現在の状態を確認
する。
32
図 6-13 シグナルとスロットによるオブジェクト間通信
◆クライアントソケット通信モジュールの設計および基本機能の実装
筆者はイテレーション1において、通信モジュールの設計及び基本機能の実装を行った。
ソケット通信に関する基本機能は Network クラスに実現された。具体的な処理の流れを図 6-14に示す。
1. クライアントソケットを起動し、初期化を行う。
2. 設定されたホストやポート番号を使って、サーバーに接続する。
3. サーバーと接続したら、サーバーへMeeGoデバイスIDを送信する。
4. デバイス IDを送信した後にユーザの操作によって、通信処理を行う。具体的な通信処 理部分の実装はチームメンバの劉建宇が担当する。
図 6-14 クライアントソケット通信のフローチャート図