低レベルルーチン - 概要

4D - Documentation   Fran溝is   English   German   日本語   4D Internet Commandsテーマリスト   4D Internet Commandsインデックス   Back   Previous   Next

version 2003 (Modified)


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接続はTCP_Close コマンドコマンドを使用して閉じなければなりません。

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

TCPコマンドの接続参照

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)
      ... ` IMAP command using the vImap_ID parameter
   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を使用するIMAPコマンド
   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+Character code(13)+Character code(10)
   $vReceivedText:=""
   $vErrorNum:=TCP_Send($vImap_Id;$vSentText)
   If ($vErrorNum=0)
      $vErrorNum:=TCP_Receive($vImap_Id;$vReceivedText)
      Case of 
         :($vErrorNum#0)   `Reception エラー
            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 - Documentation   Fran溝is   English   German   日本語   4D Internet Commandsテーマリスト   4D Internet Commandsインデックス   Back   Previous   Next