RECEIVE − メッセージの受信(データ操作言語)
- 〈このページの構成〉
形式
DATA DIVISION(通信記述項)の指定
CD 通信記述名 FOR {INPUT|I-O} 〔STATUS KEY IS データ名1〕 〔SYMBOLIC TERMINAL IS データ名2〕 〔MESSAGE DATE IS データ名3〕 〔MESSAGE TIME IS データ名4〕 〔SYNCHRONOUS MODE IS {ASYNC|データ名6}〕.
DATA DIVISION(データ記述項)の指定
01 一意名1. 02 データ名A PIC 9(4) COMP. 02 データ名B PIC X(2). 02 データ名C1 PIC X(12) VALUE LOW-VALUE. 02 データ名C2 PIC X(4). 02 データ名C3 PIC X(2) VALUE LOW-VALUE. 02 データ名C4 PIC X(2). 02 データ名C5 PIC X(4) VALUE LOW-VALUE. 02 データ名C6 PIC X(n).
PROCEDURE DIVISION(通信文)の指定
RECEIVE 通信記述名 〔FIRST〕 SEGMENT INTO 一意名1.
機能
次に示すCALLインタフェースの機能を実現します。ただし,受信できるメッセージの一つのセグメントの最大長は,制御ヘッダの24バイトを含めて32763バイトです。
-
一方送信メッセージの受信 CBLDCMCF('RECEIVE△')
セグメントを受信する領域(一意名1で示す領域)の形式を次に示します。
相手IPアドレスと相手ポート番号の設定方法については,「2.1.3 通信相手のアドレスの指定」を参照してください。
UAPで値を設定する項目
●FOR 句
次のどちらかの値を設定します。
- INPUTまたはI-O
-
非同期型のメッセージの受信
●SYMBOLIC TERMINAL 句
中間セグメントまたは最終セグメントを受信する場合,データ名2に入力元の論理端末名称を設定します。先頭セグメントの受信時に返された論理端末名称を設定してください。論理端末名称は最大8バイトの長さです。8バイトに満たない場合,論理端末名称の後ろを空白で埋めてください。
先頭セグメントまたは単一セグメントの受信処理終了後,SYMBOLIC TERMINAL句にはOpenTP1から値が返されます。
●SYNCHRONOUS MODE 句
非同期型でのメッセージ受信を示す,次のどちらかの値を設定してください。
- ASYNC
-
非同期型のメッセージの受信
- データ名6
-
次の値を設定したデータ項目
'0'または'△':非同期型のメッセージの受信
省略した場合は,ASYNC(非同期型のメッセージの受信)が設定されます。
●データ名B
MCFで使用する領域です。
●データ名C1,データ名C3,データ名C5
予備領域です。
●FIRST
先頭セグメントを受信する場合に設定します。
OpenTP1から値が返される項目
●STATUS KEY 句
ステータスコードを受け取りたい場合に設定します。省略した場合は,ステータスコードを受け取りません。データ名1にステータスコードが返されます。
●SYMBOLIC TERMINAL 句
先頭セグメントまたは単一セグメントを受信する場合,入力元の論理端末名称を受け取りたいときに設定します。省略した場合は,論理端末名称を受け取れません。データ名2にメッセージ入力元の論理端末名称が返されます。論理端末名称は最大8バイトの長さです。8バイトに満たない場合,論理端末名称の後ろが空白で埋められます。
中間セグメントまたは最終セグメントを受信する場合は,ここで返された論理端末名称をSYMBOLIC TERMINAL句に設定します。
●MESSAGE DATE 句
メッセージを受信した日付を受け取りたい場合に設定します。省略した場合は,メッセージを受信した日付を受け取れません。データ名3にメッセージを受信した日付がYYMMDD(YY:西暦下2けた MM:月 DD:日)の形式で返されます。
●MESSAGE TIME 句
メッセージを受信した時刻を受け取りたい場合に設定します。省略した場合は,メッセージを受信した時刻を受け取れません。データ名4にメッセージを受信した時刻がHHMMSS00(HH:時 MM:分 SS:秒 00は固定)の形式で返されます。
●データ名A
受信したセグメントの長さ+4が返されます。
●データ名C2
送信元のIPアドレスが返されます。
●データ名C4
送信元のポート番号が返されます。
●データ名C6
受信したセグメントの内容が返されます。一つのセグメントで32739バイトまで受信できます。
ステータスコード
ステータスコード |
意味 |
---|---|
00000 |
正常に終了しました。 |
71000 |
先頭セグメントを受信するRECEIVE文を2回以上実行しています。中間セグメントまたは最終セグメントを受信する場合は,FIRSTを設定しないでRECEIVE文を実行してください。 |
71001 |
メッセージの最終セグメントを受信したあとで,次のセグメントを受信するRECEIVE文を実行しています。直前に実行したRECEIVE文でメッセージはすべて受信しました。 このステータスコードが返されたあとに,再びRECEIVE文を実行した場合は,ステータスコード72000が返されます。 |
71002 |
メッセージキューからの入力処理中に障害が発生しました。 |
メッセージキューが閉塞されています。 |
|
メッセージキューが割り当てられていません。 |
|
MCFが終了処理中のため,メッセージの受信を受け付けられません。 |
|
71108 |
メッセージ受信に必要な管理テーブルが確保できませんでした。 |
プロセスのローカルメモリが不足しています。 |
|
72000 |
<MHPの実行でリターンした場合>
|
<SPPの実行でリターンした場合> SPPではRECEIVE文を実行できません。 |
|
72001 |
SYMBOLIC TERMINAL句に設定した論理端末名称が間違っています。 |
SYMBOLIC TERMINAL句に設定した論理端末名称は,定義されていません。 |
|
RECEIVE文を実行できない論理端末を設定しています。 |
|
SYNCHRONOUS MODE句にSYNCが設定されているか,データ名6に'1'が設定されています。 |
|
72013 |
一意名1のサイズを超えるセグメントを受信しました。一意名1のサイズを超える部分は切り捨てられました。 |
32763バイトを超えるセグメントを受信しました。32763バイトを超えた部分は切り捨てられました。 |
|
72016 |
通信文にWAITING句が設定されています。 |
72020 |
SYNCHRONOUS MODE句に設定した値が間違っています。 |
72024 |
FOR句に設定した値が間違っています。 |
72036 |
一意名1のサイズが不足しています。5バイト以上の領域を確保してください。 |
上記以外 |
プログラムの破壊などによる,予期しないエラーが発生しました。 |