2.4.2 通信形態
TCP/IP通信機能を使用したメッセージの送受信には,次の3種類があります。
-
CUP.NETからMHPへのメッセージの一方送信
-
MHPからCUP.NETへのメッセージの一方受信
-
MHPとCUP.NETとの間のメッセージの送受信
- 〈この項の構成〉
(1) メッセージの一方送信
CUP.NETからMHPに対して一方的にメッセージを送信できます。これをメッセージの一方送信といいます。
CUP.NETからSendメソッドを呼び出して,MHPへメッセージを送信します。メッセージの組み立て機能を使用する場合は,SendAssembledMessageメソッドを実行します。
メッセージを一方送信するには,次の指定をしておく必要があります。
-
接続先のノード名を次のどちらかの方法で指定
(a) Sendメソッド,またはSendAssembledMessageメソッドの引数hostnameに指定
(b) Client .NET構成定義の<tcpip>要素のsendHost属性に指定
-
接続先のポート番号(MCF通信構成定義の定義コマンドmcftalccnのportnoで指定したポート番号)を次のどちらかの方法で指定
(a) Sendメソッド,またはSendAssembledMessageメソッドの引数portnumに指定
(b) Client .NET構成定義の<tcpip>要素のsendPort属性に指定
-
Client .NET構成定義の<tcpip>要素のtype属性にsendを指定
メッセージの一方送信を次の図に示します。
|
-
MHPが起動されたあと,CUP.NETからSendメソッドを呼び出します。
-
Sendメソッドの呼び出し時に,MHPからコネクションが解放されていたときは,CUP.NETにErrNetDownExceptionが返されます。
-
再びメッセージを一方送信するには,Sendメソッドを呼び出します。
(2) メッセージの一方受信
MHPからCUP.NETに対して一方的に送信したメッセージをCUP.NETで受信できます。これをメッセージの一方受信といいます。
CUP.NETは,Receiveメソッドを呼び出して,MHPからのメッセージをTCP/IPプロトコルを使用して受信します。メッセージの組み立て機能を使用する場合は,ReceiveAssembledMessageメソッドを実行します。
指定したメッセージ長よりも短いメッセージを受信した場合,Client .NETは,メッセージが分割されているものとみなし,指定した長さ分のメッセージを受信するまで,CUP.NETに制御を戻しません。タイムアウトやエラーが発生した場合に,指定した長さ分のメッセージに満たないときでも,その時点までのメッセージを受信できます。ただし,それ以降のメッセージの組み立ては,ユーザの責任で行ってください。
メッセージを一方受信するには,あらかじめ,Client .NET構成定義で次の指定をしておく必要があります。
-
<tcpip>要素のrecvPort属性にCUP.NETの受信用ポート番号(MCF通信構成定義の定義コマンドmcftalccnのoportnoオペランドで指定したポート番号)を指定
-
<tcpip>要素のtype属性にrecvを指定
マルチスレッドで動作するCUP.NETを含め,同一マシンでCUP.NETを複数実行する場合は,Client .NET構成定義の<tcpip>要素のrecvPort属性にCUPごと(スレッドごと)に異なるCUP.NETの受信用ポート番号を設定してください。CUP.NETごとのClient .NET構成定義の設定方法については,「3. 構成定義」を参照してください。受信用ソケットの開設は,OpenRpcメソッド実行時に行います。
メッセージの一方受信を次の図に示します。
|
-
MHPがコネクションの確立要求を再試行している間に,CUP.NETがReceiveメソッドを呼び出します。再試行中にコネクションを確立できなかった場合,mcftactcnコマンドを入力してコネクションを確立します。
-
MHPからコネクションが解放された場合,CUP.NETにErrConnfreeExceptionが返されます。
-
再びメッセージを一方受信するには,Receiveメソッドを呼び出します。この場合,mcftactcnコマンドを入力してコネクションを確立してください。
(3) メッセージの送受信
CUP.NETとMHPとの間で,メッセージを送受信できます。
メッセージの送受信は,コネクションが解放されていなければ同じコネクションを使用します。
- MHPがサーバ型の場合
-
CUP.NETからMHPに対してメッセージを送信した際に確立したコネクションを使用してメッセージの送受信を行います。このため,CUP.NETでは受信用のソケットを使用しません。
CUP.NETからSendメソッドを実行してMHPへメッセージを送信し,Receiveメソッドを実行して,MHPからのメッセージを受信します。メッセージの組み立て機能を使用する場合は,CUP.NETからSendAssembledMessageメソッドを実行してMHPへメッセージを送信し,ReceiveAssembledMessageメソッドを実行してMHPからのメッセージを受信します。
- MHPがクライアント型の場合
-
MHPから送信されたメッセージをCUP.NETで受信した際に確立したコネクションを使用してメッセージの送受信を行います。
CUP.NETでReceiveメソッドを実行して,MHPからのメッセージを受信し,Sendメソッドを実行してMHPへメッセージを送信します。メッセージの組み立て機能,または送達確認機能を使用する場合は,CUP.NETでReceiveAssembledMessageメソッドを実行してMHPからのメッセージを受信し,SendAssembledMessageメソッドを実行してMHPへメッセージを送信します。
メッセージを送受信するには,次の指定をしておく必要があります。Client .NET構成定義の詳細については,「3. 構成定義」を参照してください。
- MHPがサーバ型の場合
-
-
接続先のノード名を次のどちらかの方法で指定
(a) Sendメソッド,またはSendAssembledMessageメソッドの引数hostnameに指定
(b) Client .NET構成定義の<tcpip>要素のsendHost属性に指定
-
接続先のポート番号(MCF通信構成定義の定義コマンドmcftalccnのportnoで指定したポート番号)を次のどちらかの方法で指定
(a) Sendメソッド,またはSendAssembledMessageメソッドの引数portnumに指定
(b) Client .NET構成定義の<tcpip>要素のsendPort属性に指定
-
Client .NET構成定義の<tcpip>要素のtype属性にsendrecvを指定
-
Client .NET構成定義の<tcpip>要素のopenPortAtRecv属性にtrueを指定
CUP.NETでは受信用ソケットを使用しないため,Client .NET構成定義<tcpip>要素のopenPortAtRecv属性にtrueを指定し,受信用ソケットを開設しないようにしてください。
-
- MHPがクライアント型の場合
-
-
Client .NET構成定義の<tcpip>要素のrecvPort属性にCUP.NETの受信用ポート番号(MCF通信構成定義の定義コマンドmcftalccnのoportnoで指定したポート番号)を指定
マルチスレッドで動作するCUP.NETを含め,同一マシンでCUP.NETを複数実行する場合は,Client .NET構成定義の<tcpip>要素のrecvPort属性をCUPごと(スレッドごと)に異なるポート番号となるように設定してください。CUP.NETごとのClient .NET構成定義の設定方法については,「3. 構成定義」を参照してください。
-
Client .NET構成定義の<tcpip>要素のtype属性にsendrecvを指定
-
メッセージの送受信を次の図に示します。
|