![]() |
HOME > プログラマーズガイド > 通信プロトコル |
通信プロトコル
NumberWatcher サーバとクライアント間の通信インターフェースは TCP/IP 通信と IP マルチキャスト通信の 2 つに対応しています。 ここではそれぞれの通信プロトコルを説明します。 TCP/IP インターフェースを使う場合は numwat.ini ファイルを以下のように TCP/IP インターフェースを有効にしておく必要があります。
[Dispatch.TCP] 通信フロー
![]() クライアントはサーバに何らかの要求コマンド(以下、コマンドと言う)を送信すると、サーバはそのコマンドを実行して、結果レスポンス(以下、レスポンスと言う)を返します。 基本的にはこのやりとりを繰り返して対話しますが、サーバへコマンドを送信しない場合にもレスポンスが返ってくる場合があります。 これは右図の中の「イベント」です。このイベントは電話着信時に発生し、クライアントには非同期に通知されます。そのため、例えば右図中の「イベント 2」のケースでは、クライアントからのコマンドに対するレスポンスを返す前に、クライアントにイベントを送っています。 クライアントはサーバに何も送信しない状態が長く続くと、サーバから接続解除されます。 これは、クライアントが生きているかどうかサーバは常にクライアントからの送信を監視しており、クライアントから何らかのデータを受信するたびに接続継続確認用タイマをリセットします。 このタイマが指定した時間経過すると、その対象のクライアントとの接続を解除します。 付属のクライアントモジュールを使わずに、クライアント側を独自実装する場合は、このようなサーバの動作に対応した実装にするようにして下さい。(付属のクライアントモジュールを使って開発する場合はこのようなことをあまり意識する必要はありません。) 通信データフォーマット
![]() クライアントからサーバに送るコマンドは 1 行のデータとして送信します。データの終わりは
サーバからクライアントに送るレスポンスは「ヘッダ部」と「データ部」で構成されています。
右図中の
装備しているコマンドとそのレスポンス
個々のコマンドとそのレスポンスの説明をします。コマンドは大文字でも小文字でも構いません。
イベント
イベントは電話着信時の OnPhoneDetect のみとなります。イベントは非同期にクライアントに通知するため、コマンドに対するレスポンスを返す前に、イベントレスポンスを送るケースもあります。 レスポンスのデータ部に電話番号情報が入っていますが、このフォーマット READ コマンドのレスポンスのデータ部と同じです。 エラーコード値
サーバ側でコマンド実行エラーが起こった場合にはレスポンスヘッダ部の "Result" ヘッダにエラーコードがセットされます。("Result: Failed *" の * の値) エラーコードの意味は以下の通りです。 エラーコード表)
IP マルチキャストインターフェースを使う場合は numwat.ini ファイルを以下のように IP マルチキャストインターフェースを有効にしておく必要があります。
[Dispatch.Multicast] 通信フロー
![]() TCP/IP インターフェースとは異なり、IP マルチキャストインターフェースでは NumberWatcher サーバがクライアントへデータを送るだけの単方向通信となります。そのため TCP/IP インターフェースのようなコマンド/レスポンスの対話はできません。サーバは電話着信時に同一のマルチキャストグループのメンバー(クライアント)に電話番号パケットを送信しています。 マルチキャストパケットが届く範囲は TTL によって決まります。TTL の設定は numwat.ini ファイルの [Dispatch.Multicast] ttl にて行います。 電話番号パケットのフォーマット
![]() 電話番号パケットは右図のように構成されています。 先頭の 6 バイトは "NUMBER" という文字列が入っています。 アダプタインデックスは電話着信元のナンバーディスプレイアダプタの識別用の番号(1台目=0, 2台目=1,...)です。 電話着信日時はナンバーディスプレイアダプタから取得した内容ですが、[年] に関してはナンバーディスプレイアダプタに存在しないため、月と日と NumberWatcher のサーバマシンの日付を元に自動計算した値がセットされています。そのため正確にならない場合があります。 電話番号の種別は 0=有効な電話番号, 1=非通知, 2=表示圏外, 3=公衆電話, 4=電話番号なし(この値は実際にはあり得ないはずです), 5=エラー という意味です。電話番号は取り出しやすくするために末尾に 0x00 コードが付いています。 最後の項目のチェックサムは先頭から 39 バイト分のバイト単位の加算結果としています。
Copyright © 2003 Hitwareland Corporation. All rights reserved.
|