2.5.4 メッセージの組み立て機能と送達確認機能

TP1/Clientでは,メッセージの送受信時に自動的にメッセージの先頭4バイトにメッセージ長を付加・削除する機能があります。これを,メッセージの組み立て機能といいます。この機能を使用すると,CUPを作成するときにメッセージ長を意識する必要がなくなります。

さらに,先頭4バイトのメッセージ長に加えて,1バイトのセグメント情報,および6バイトのメッセージIDを付加してメッセージを送信し,応答専用データを受信して,メッセージの送達確認をすることもできます。これを,メッセージの送達確認機能といいます。この機能を使用すると,CUPを作成するときにメッセージの妥当性およびメッセージが送達したかどうかを意識する必要がなくなります。

メッセージの組み立て機能とメッセージの送達確認機能は,共に次の関数を発行してメッセージを送受信することで実現します。

これらの関数を発行したときに,メッセージの組み立て機能とメッセージの送達確認機能のどちらを使用するのかは,クライアント環境定義DCCLTDELIVERYCHECKで次の表に示すように指定します。

表2-4 使用する機能とクライアント環境定義DCCLTDELIVERYCHECKの指定値の関係

使用する機能クライアント環境定義DCCLTDELIVERYCHECKの指定値
メッセージの組み立て機能N,または指定を省略
メッセージの送達確認機能Y
<この項の構成>
(1) 使用するための条件
(2) メッセージの形式
(3) メッセージの組み立て機能を使用する場合の送受信の流れ
(4) メッセージの送達確認機能を使用する場合の送受信の流れ
(5) 妥当性チェック

(1) 使用するための条件

どちらの機能を使用する場合も,引数flagsにDCCLT_ONEWAY_SND,DCCLT_ONEWAY_RCV,またはDCCLT_SNDRCVを指定したdc_rpc_open_s関数を発行しておく必要があります。

さらに,相手システムであるTP1/NET/TCP/IPも,受信メッセージの組み立て機能,または送達確認機能を使用する設定にします。TP1/NET/TCP/IPの設定方法については,マニュアル「OpenTP1 プロトコル TP1/NET/TCP/IP編」を参照してください。ただし,送受信メッセージの形式が同じである場合は,相手システムは限定しません。

(2) メッセージの形式

メッセージの組み立て機能を使用する場合と,送達確認機能を使用する場合に分けて,メッセージの形式について説明します。

(a) メッセージの組み立て機能を使用する場合

メッセージの組み立て機能を使用する場合の,送受信メッセージの形式を次の図に示します。

図2-22 メッセージの組み立て機能使用時の送受信メッセージの形式

[図データ]

メッセージ長とは,組み立て,分解をするメッセージの全体長です。

(b) メッセージの送達確認機能を使用する場合

ここでは,メッセージの送達確認機能を使用する場合の送受信メッセージの形式,および応答専用データの形式について説明します。

(3) メッセージの組み立て機能を使用する場合の送受信の流れ

メッセージの組み立て機能を使用する場合のメッセージの組み立て,分解の流れについて説明します。

(a) メッセージの送信

メッセージの組み立て機能を使用してメッセージを送信する場合,dc_clt_assem_send_s関数を発行します。dc_clt_assem_send_s関数は,メッセージの先頭4バイトにメッセージ長を付加して送信します。

メッセージの組み立て機能を使用するときの送信の流れを次の図に示します。

図2-25 メッセージの組み立て機能使用時の送信の流れ

[図データ]

メッセージを送信してすぐにコネクションを解放したい場合は,dc_clt_assem_send_s関数の引数flagsにDCCLT_SND_CLOSEを指定します。DCNOFLAGSを指定した場合,dc_rpc_close_s関数を発行するまでコネクションは解放されません。ただし,障害時を除きます。

通信先となるTP1/NET/TCP/IPのホスト名はクライアント環境定義DCSNDHOSTに,ポート番号はクライアント環境定義のDCSNDPORTに指定します。ホスト名とポート番号は,dc_clt_assem_send_s関数の引数に指定することもできます。

(b) メッセージの受信

メッセージ組み立て機能を使用してメッセージを受信する場合,dc_clt_assem_receive_s関数を発行します。送信時にメッセージの先頭に付加された,メッセージ長分のメッセージを受信します。

メッセージの組み立て機能を使用するときの受信の流れを次の図に示します。

図2-26 メッセージの組み立て機能使用時の受信の流れ

[図データ]

メッセージの受信後すぐにコネクションを解放したい場合は,dc_clt_assem_receive_s関数の引数flagsにDCCLT_RCV_CLOSEを指定します。DCNOFLAGSを指定した場合,dc_rpc_close_s関数を発行するまで,コネクションは解放されません。ただし,障害時を除きます。

CUPのポート番号は,クライアント環境定義DCRCVPORTに指定します。

(4) メッセージの送達確認機能を使用する場合の送受信の流れ

メッセージの送達確認機能を使用する場合のメッセージの組み立て,分解,応答専用データの送受信の流れについて説明します。

(a) メッセージの送信と送達確認

メッセージの送達確認機能を使用してメッセージを送信する場合,dc_clt_assem_send_s関数を発行します。メッセージの送信後に,TP1/ClientはTP1/NET/TCP/IPの応答専用データを待ち合わせます。TP1/Clientは,TP1/NET/TCP/IPから応答専用データを受信したあと,CUPに制御を戻します。なお,受信した応答専用データは,CUPに通知しません。

メッセージの送達確認機能を使用するときの送信の流れを次の図に示します。

図2-27 メッセージの送達確認機能使用時の送信の流れ

[図データ]

メッセージの送達確認機能を使用すると,メッセージの送信から応答専用データの受信までを監視できます。監視タイマがタイムアウトした場合,TP1/Clientは,TP1/NET/TCP/IPとのコネクションを解放し,DCCLTER_TIMED_OUTを返します。

メッセージの送信および応答専用データは,同一コネクションを使用して受信します。応答専用データを受信してすぐにコネクションを解放したい場合は,dc_clt_assem_send_s関数の引数flagsにDCCLT_SND_CLOSEを指定します。DCNOFLAGSを指定した場合,dc_rpc_close_s関数を発行するまで,コネクションは解放されません。ただし,障害時を除きます。

通信先となるTP1/NET/TCP/IPのホスト名はクライアント環境定義DCSNDHOSTに,ポート番号はクライアント環境定義のDCSNDPORTに指定します。ホスト名とポート番号は,dc_clt_assem_send_s関数の引数に指定することもできます。

(b) メッセージの受信と送達確認

メッセージの送達確認機能を使用してメッセージを受信する場合,dc_clt_assem_receive_s関数を発行します。TP1/NET/TCP/IPからメッセージを受信したあと,TP1/NET/TCP/IPに応答専用データを送信し,CUPに制御を戻します。

メッセージの送達確認機能を使用するときの受信の流れを次の図に示します。

図2-28 メッセージの送達確認機能使用時の受信の流れ

[図データ]

メッセージの受信および応答専用データは,同一コネクションを使用して送信します。応答専用データを送信してすぐにコネクションを解放したい場合は,dc_clt_assem_receive_s関数の引数flagsにDCCLT_RCV_CLOSEを指定します。DCNOFLAGSを指定した場合,dc_rpc_close_s関数を発行するまで,コネクションは解放されません。ただし,障害時を除きます。

(c) 送受信メッセージの衝突

TP1/Clientから送信したメッセージと,TP1/NET/TCP/IPから送信したメッセージが衝突した場合,TP1/Clientは受信したメッセージを破棄し,TP1/NET/TCP/IPとのコネクションを解放したあと,DCCLTER_COLLISION_MESSAGEを返します。

送受信メッセージが衝突した場合の,処理の流れを次の図に示します。

図2-29 送受信メッセージの衝突時の処理の流れ

[図データ]

(5) 妥当性チェック

メッセージの組み立て機能,および送達確認機能を使用する場合,送受信するメッセージの妥当性がTP1/Clientによって自動的にチェックされます。

(a) メッセージ長の妥当性チェック(メッセージの組み立て機能)

メッセージの組み立て機能を使用する場合,TP1/Clientはメッセージを受信後に,メッセージ長の妥当性チェックをします。発生するエラー別の対処を次の表に示します。

表2-5 メッセージ長の妥当性チェックで発生するエラーと対処

項番エラーシステムの処理対処
1不正なメッセージを受信(メッセージ長が0~4)処理を中断相手システムの設定を見直す
2受信バッファ不足が発生(メッセージ長-4が引数recvlengよりも大きい)処理を中断dc_clt_assem_receive_s関数の引数recvlengに指定した値が適切かどうか,またはMHPを見直す
(b) 応答専用データの妥当性チェック(メッセージの送達確認機能)

メッセージの送達確認機能を使用する場合,TP1/Clientはメッセージの送信後に応答専用データを受信し,妥当性をチェックします。発生するエラー別の対処を次の表に示します。

表2-6 応答専用データの妥当性チェックで発生するエラーと対処

項番エラーシステムの処理対処
1次に示す不正なメッセージを受信
  • メッセージ長が0~10
  • メッセージ長が11で,セグメント情報が0x10以外
  • セグメント情報が0x10,0x18以外
処理を中断相手システムの設定を見直す
2メッセージが衝突処理を中断必要に応じてリトライ
3メッセージIDが不一致受信リトライ特になし
(c) 受信メッセージの妥当性チェック(メッセージの送達確認機能)

メッセージの送達確認機能を使用する場合,TP1/Clientはメッセージを受信後に,妥当性をチェックします。エラーが発生した場合,TP1/Clientは処理を中断します。発生するエラー別の対処を次の表に示します。

表2-7 受信メッセージの妥当性チェックで発生するエラーと対処

項番エラーシステムの処理対処
1次に示す不正なメッセージを受信
  • メッセージ長が0~11
  • セグメント情報が0x10,0x18以外
処理を中断相手システムの設定を見直す
2受信バッファ不足が発生(メッセージ長-11が引数recvlengよりも大きい)処理を中断dc_clt_assem_receive_s関数の引数recvlengに指定した値が適切かどうか,またはMHPを見直す