TCPソケットフレーミング仕様は、TCPソケット接続でデータを送受信する場合の必須の手順です。
目的
フレームの主なタスクは、この接続を介して送受信されるデータの構造に関する情報を提供することです。データを受信するときは、データをパッケージに分割して、アプリケーションに配信できるようにする必要があります。データを送信するとき、提供されたフレーム情報に従ってデータが有効かどうかがチェックされます。
TCP Socketサーバー、TCP Socketクライアント、TCP Socketデタッチドクライアントなど、TCPSocket接続を使用するアプリケーションのTCPSocketフレーミング仕様を提供する必要があります。指定には、(タイプAPC_TCP_FRAMEの)フレーム構造で属性frame_typeを使用します。
TCPソケットサーバーアプリケーションの場合、ON_CONNECTION_SETUPメソッドでフレーム構造を指定します。
TCPソケットクライアント/デタッチクライアントアプリケーションの場合、メソッドCL_APC_TCP_CLIENT_MANAGER => CREATE(クライアント)またはCL_APC_TCP_CLIENT_CONN_MANAGER => CREATE (デタッチクライアント)でフレーム構造を指定します。
TCPソケットフレームタイプ
TCPソケットフレームは、次のフレームタイプのいずれかになります。
- IF_APC_TCP_FRAME_TYPES => CO_FRAME_TYPE_TERMINATOR:TCPフレーム(メッセージ)は、1バイトまたは数バイトで終了します(例:ラインフィード(LF)またはキャリッジリターンラインフィード(CRLF))。ターミネータバイトを16進コード表現(00-FF)として、フレーム構造のターミネータ属性に渡す必要があります(たとえば、 0ALFまたは0D0ACRLFの場合)。セミコロンで区切られた複数のターミネータを指定することもできます。たとえば、CRLFとヌルバイトの両方をターミネータとして指定するには、を使用します0D0A;00。
- IF_APC_TCP_FRAME_TYPES => CO_FRAME_TYPE_FIXED_LENGTH:TCPフレーム(メッセージ)の長さはバイト単位で一定です。バイト単位のフレーム長は、フレーム構造の属性fixed_lengthに渡す必要があります。
- IF_APC_TCP_FRAME_TYPES => CO_FRAME_TYPE_LENGTH_FIELD:バイト単位のフレーム長は、フレーム(メッセージ)自体の一部であり、フレームの固定位置にあります。つまり、長さフィールドは、事前定義されたオフセットと事前定義されたサイズで存在します。これらのタイプのフレーム(例としてRFC 1006)は、フレームの位置xに長さフィールドがあります。つまりオフセットはxであり、フィールド長の長さは固定長、つまり1、2、4、または8バイトです。長さフィールドは、フレーム全体/総フレームの長さを指定します。長さフィールドには、ビッグエンディアン形式の整数値が含まれている必要があります。アウトバウンドメッセージの長さ項目を設定する場合、たとえばクラスCL_ABAP_CONV_X2X_CEを使用して、長さをネイティブプラットフォーム表現からビッグエンディアン表現に変換する必要があります。。on_messageメソッドによって返されるメッセージの長さから長さを簡単に導出できるため、通常、インバウンドメッセージの長さフィールドを読み取る必要はありません。バイト単位のオフセットは属性length_field_offsetに渡される必要があり、バイト単位の長さフィールドの長さはフレーム構造の属性length_field_lengthに渡される必要があります。
-
IF_APC_TCP_FRAME_TYPES => CO_FRAME_TYPE_TEXT_DEFINITION:TCPフレームは、カーネルでサポートされているテキスト定義として提供されます。テキスト定義は、フレーム構造の属性text_definitionに渡す必要があります。サポートされているテキスト定義のリストは、SAPノート2693593にあります。システムでテキスト定義を使用するためにカーネルパッチが必要な場合は、一致するSAPノートへの参照もあります。