4D Internet Commands v16

低レベルルーチン - 概要

ホーム

 
4D Internet Commands v16
低レベルルーチン - 概要

低レベルルーチン - 概要  


 

 

Transmission Control Protocol/Internet Protocol (TCP/IP) は、インターネット上にデータを送信する際に使用される主なプロトコルです。4D Internet Commandsで提供されるTCPコマンドを使用すると、開発者はTCPセッションを確立し、TCPパケットを送受信できるようになります。

TCP接続を確立する方法は二つあります。ひとつはTCP_Open コマンドを実行することです。このコマンドは指定したドメインに、指定したポートで接続を開きます。TCP_Openでは、SSL (Secured Socket Layer) を使用できます。もう一つの方法はTCP_Listen コマンドを実行することです。このコマンドは指定したドメインとポートを開き、やってくる接続を待ちます。接続が確立されたかを知る最適な方法は、TCP_Listen コマンド使用後にTCP_Stateコマンドでセッションの状態を確認することです。現在のセッションの状態を示すコードがこのコマンドからは返されます。その後、TCP_Openで確立した接続でできるのと同じように、TCPパケットの送受信ができます。

どのような場合でも、開かれたTCP接続はTCP_Close コマンドコマンドを使用して閉じなければなりません。

低レベルTCP/IPコマンドは通信のプロトコルに関する詳細な知識を必要とします。これらのルーチンを使用する開発者は、実装しようとするプロトコルについて完全な理解が必要です。さまざまなTCP/IPに割り当てられたポート番号、通信プロトコル、アドレッシングについての情報はRFCで見つけることができます。

4D Internet commandsではPOP3, IMAP, FTP接続参照を直接低レベルTCPコマンドに渡したり、その逆ができます。

実際、プロトコルは絶えず進化するので、新しいコマンドが必要になることがあります。またいくつかのソフトウェアパッケージはRFCを独自に解釈し、標準的な実装が使用できなくなる場合もあります。既存のコマンドを使用する代わりに、あるいは存在しない機能を実装するために、低レベルTCPコマンドを使用して開発者は必要な高レベル関数を作成できます。

開発者はプロトコルが必要とするコマンドをすべて書き直さなくともよくなるため、互換性や開発の可能性が格段に向上します。

この例題では、IMAP_Capability コマンドと同機能の関数をTCP_IPコマンドで記述します。

  • これはIMAP_Capability コマンドを使用した初期のメソッドです:
 $ErrorNum:=IMAP_Login(vHost;vUserName;vUserPassword;vImap_ID)
 If($ErrorNum=0)
    C_TEXT(vCapability)
    $ErrorNum:=IMAP_Capability(vImap_ID;vCapability)
    ... ` vImap_ID引数を使用するIMAPコマンド
 End if
 $ErrorNum:=IMAP_Logout(vImap_ID)
  • このメソッドは以下のメソッドで置き換えられます:
 $ErrorNum:=IMAP_Login(vHost;vUserName;vUserPassword;vImap_ID)
 If($ErrorNum =0)
    C_TEXT(vCapability)
  ` vImap_ID引数を使用するTCPメソッド:
    $ErrorNum:=My_IMAP_Capability(vImap_ID)
    ... ` vImap_ID引数を使用するTCPコマンド
 End if
 $ErrorNum:=IMAP_Logout(vImap_ID)
  • My_IMAP_Capability 関数のコードは以下の通りです:
 C_LONGINT($1;$vErrorNum;$0)
 C_TEXT($vSentText;$vReceivedText;vCapability)
 C_TEXT($2)
 
 $vImap_Id:=$1
 $vCmd_Id:="A001" ` このコマンドIDはユニークでなければならない (cf. RFC 2060)
 $MyvtRequestCmd:="CAPABILITY"
 $vSentText;:=$vCmd_Id+""+$MyvtRequestCmd+"\r\n"
 $vReceivedText:=""
 $vErrorNum:=TCP_Send($vImap_Id;$vSentText)
 If($vErrorNum=0)
    $vErrorNum:=TCP_Receive($vImap_Id;$vReceivedText)
    Case of
       :($vErrorNum#0) `受信エラー
          vCapability:=""
       :(Position($vCmd_Id+" OK ";$vReceivedText)#0)
  ` コマンド実行に成功
          vCapability:=$vReceivedText
  ` この例題では受信した文字列を処理しない
       :(Position($vCmd_Id+" BAD ";$vReceivedText)#0)
  ` コマンド実行に失敗
  ` (シンタックスエラーまたは未知のコマンド)
          vCapability:=""
          $vErrorNum:=10096
    End case
 End if
 $0:=$vErrorNum

 
プロパティ 

プロダクト: 4D Internet Commands
テーマ: IC TCP/IP

 
履歴 

 
ARTICLE USAGE

4D Internet Commands ( 4D Internet Commands v16)