4D v13.4

SEND PACKET

ホーム

 
4D v13.4
SEND PACKET

SEND PACKET 


 

SEND PACKET ( {DocRef ;} packet ) 
引数   説明
DocRef  DocRef in ドキュメント参照番号, または カレントのチャンネル (シリアルポートまたはドキュメント)
packet  文字, BLOB in 送信する文字またはBLOB

説明   

SEND PACKET は、シリアルポートやドキュメントにパケットを送ります。docRefを指定した場合、パケットはdocRefで参照されるドキュメントに書き込まれます。docRefを指定しない場合、あらかじめSET CHANNELコマンドで開かれたシリアルポートまたはドキュメントにパケットを書き込みます。

packetはデ-タの一部であり、一般的には文字列です。
packetにBLOBを渡すこともできます。これにより、テキストモードで送信される文字のエンコーディングに関連する制約を回避できます (例題 2参照)。

Note: packetにBLOBを渡す場合、コマンドはUSE CHARACTER SET コマンドで定義された文字セットを考慮しません。BLOBは変更されずに送信されます。

SEND PACKETコマンドを使用する前に、SET CHANNELコマンドでシリアルポートやドキュメントを開くか、ドキュメントコマンドを使用してドキュメントを開かなければなりません。

既存のドキュメントに書き込む場合は、ドキュメントがAppend documentで開かれていない限り、最初のSEND PACKETコマンドはドキュメントの先頭から書き始めます。それに続くSEND PACKETコマンドは、ドキュメントファイルが閉じられるまでパケットを後ろに書き加えます。

Note: このコマンドはSET CHANNELで開かれたドキュメントに対して有効です。一方で、Open document, Create document あるいは Append documentで開かれたドキュメントに関しては、Get document positionSET DOCUMENT POSITIONコマンドを使用して、次の書き込み (SEND PACKET) や読み込み (RECEIVE PACKET) を行うドキュメント中の位置を取得したり設定したりできます。

重要: 非Unicode mode (互換モード) では、SEND PACKETはWindows と Macintosh両プラットフォームでMac OS ASCIIデータを書き込みます。Mac OS ASCIIデータは8ビットを使用します。標準ASCIIは下位7ビットしか使用しません。多くのデバイスはWindows/Macintoshと異な り、8ビットを使用しません。送信する文字列が8番目のビットを使用するデータを含む場合、ASCII文字を変換するASCIIマップを作成して、SEND PACKETの前にUSE CHARACTER SETを 実行してください。Mac to Win 関数を使用することもできます (詳細情報はこの関数の例題を参照してください)。XON/XOFFなどのプロトコルは、マイン間の通信を確立するために下位ASCIIコードを使用しま す。そのようなASCIIコードを送信しないように注意してください。これを行うとプロトコルを妨げ、通信が中断されることがあります。

 以下の例は、フィールドのデータをドキュメントに書き込みます。この例では、固定長データとして書き込みます。固定長フィールドは常に決まった長さで す。フィールドが指定した長さよりも短い場合、その分のスペースを埋め込みます(つまり、指定された長さになるまでスペースを付け加えます)。固定長デー タの使用は、データ格納の合理的な方法とはいえませんが、一部のコンピュータシステムやアプリケーションでは、まだ使用されています:

 $vhDocRef :=Create document("") ` ドキュメントを作成
 If(OK=1) ` ドキュメントが作成されたら
    For($vlRecord;1;Records in selection([People])) ` レコードごとに繰り返す
  ` パケット送信。名フィールドのデータを含む長さ15のパケットを作成
       SEND PACKET($vhDocRef;Change string(15*Char(SPACE);[People]First;1))
  ` 2つ目のパケット送信。姓フィールドのデータを含む長さ15のパケットを作成
       SEND PACKET($vhDocRef;Change string(15*Char(SPACE);[People]Last;1))
       NEXT RECORD([People])
    End for
  ` Char(26)を送信、これはいくつかのコンピュータでend-of-fileのマーカとして使用されます
    SEND PACKET($vhDocRef;Char(SUB ASCII code))
    CLOSE DOCUMENT($vhDocRef` ドキュメントを閉じる
 End if

 この例題はBLOB経由でドキュメントの拡張文字を送信したり受信したりする方法を示します:

 C_BLOB($send_blob)
 C_BLOB($receive_blob)
 TEXT TO BLOB("azerty";$send_blob;UTF8 Text without length)
 SET BLOB SIZE($send_blob;16;255)
 $send_blob{6}:=0
 $send_blob{7}:=1
 $send_blob{8}:=2
 $send_blob{9}:=3
 $send_blob{10}:=0
 $vlDocRef:=Create document("blob.test")
 If(OK=1)
    SEND PACKET($vlDocRef;$send_blob)
    CLOSE DOCUMENT($vlDocRef)
 End if
 $vlDocRef:=Open document(document)
 If(OK=1)
    RECEIVE PACKET($vlDocRef;$receive_blob;65536)
    CLOSE DOCUMENT($vlDocRef)
 End if

 
プロパティ 

プロダクト: 4D
テーマ: 通信
番号: 103

Unicodeモードの設定がこのコマンドの動作に影響します

 
目次

コマンドリスト (文字順)

 
履歴 

変更: 4D v11 SQL

 
参照 

Get document position
RECEIVE PACKET
SET DOCUMENT POSITION