2.4.4 TCP/IP通信機能を使用するときの注意事項
(1) メッセージ送信時の注意事項
(a) 障害発生時のメッセージの消失
次に示す障害が発生すると,Client .NETおよび相手システムでは,メッセージが消失したことを検出できません。したがって,ユーザはあらかじめメッセージ中に通番を付けるなどして,障害に備えてください。
-
ソケットのバッファにClient .NETが送信したメッセージが書き込まれて送信が正常終了した直後に,通信障害が発生したり,コネクションが解放されたりした場合
-
Client .NETが送信したメッセージが相手システムの受信バッファに書き込まれる直前に通信障害が発生したり,コネクションが解放されたりした場合
(b) コネクションの確立
Client .NETがクライアントとなり,相手システムにメッセージを送信します。そのため,Client .NETから相手システムに対して,コネクションを確立します。相手システムがTP1/NET/TCP/IPを使用している場合,コネクションはサーバ型となります。
(2) メッセージ受信時の注意事項
(a) 障害発生時のメッセージの消失
次に示す障害が発生すると,Client .NETおよび相手システムでは,メッセージが消失したことを検出できません。したがって,ユーザはあらかじめメッセージ中に通番を付けるなどして,障害に備えてください。
-
ソケットのバッファに相手システムが送信したメッセージが書き込まれて送信が正常終了した直後に,通信障害が発生したり,コネクションが解放されたりした場合
-
相手システムが送信したメッセージがClient .NET側の受信バッファに書き込まれる直前に,通信障害が発生したり,コネクションが解放されたりした場合
(b) 受信するメッセージの確認
任意の相手システムからのメッセージを受信できます。そのため,コネクションの確立要求を受けると,その要求を無条件に受諾してメッセージを受信します。ユーザは,メッセージ識別子が含まれたヘッダをメッセージ中に含めるなどして,CUP.NETが受け取るメッセージかどうかを確認してください。
(c) メッセージ長
TCP/IPプロトコルを使用してメッセージを受信します。
TCP/IPプロトコルでは,一つのメッセージを複数のパケットに分割したり,複数のメッセージを一つのパケットに詰め込んだりします。そのため,ユーザが指定するメッセージ長以外に,受信したメッセージの切れ目を判断できません。ユーザはメッセージ長を含めた固定長のヘッダを最初に受信し,ヘッダに含まれているメッセージ長を指定して,実際のメッセージを受信してください。
指定したメッセージ長より短いメッセージを受信した場合,Client .NETは,メッセージが分割されているものと見なします。そのため,指定した長さ分のメッセージを受信するまで,CUP.NETに制御を戻しません。
タイムアウトやエラーの発生によって,指定した長さ分のメッセージを受信していない場合でも,その時点までのメッセージを受信できます。
(d) コネクションの確立
Client .NETがサーバとなり,相手システムからのメッセージを受信します。そのため,相手システムからClient .NETに対して,コネクションを確立します。相手システムがTP1/NET/TCP/IPを使用している場合,コネクションはクライアント型になります。
(3) その他の注意事項
TP1/NET/TCP/IPの受信メッセージの組み立て機能を使用すると,MHPが送信したデータの先頭に4バイトのメッセージ長が付与されます。また,MHPにデータを送信する場合は,先頭4バイトにメッセージ長を設定する必要があります。メッセージ長は,ネットワークバイトオーダーにしてください。なお,このメッセージ長は,MHPが受信するときには削除されます。CUP.NETでは,送信時および受信時に,メッセージ長を意識する必要があるので注意してください。TP1/NET/TCP/IPの受信メッセージの組み立て機能を使用する場合は,TP1/NET/TCP/IPのプロトコル固有定義で次のように指定します。
mcftalccn -u masm=yes
TP1/NET/TCP/IPのプロトコル固有定義の詳細については,マニュアル「OpenTP1 プロトコル TP1/NET/TCP/IP編」を参照してください。