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コマンドで記述します。
$ErrorNum:=IMAP_Login(vHost;vUserName;vUserPassword;vImap_ID)
If($ErrorNum=0)
C_TEXT(vCapability)
$ErrorNum:=IMAP_Capability(vImap_ID;vCapability)
...
End if
$ErrorNum:=IMAP_Logout(vImap_ID)
$ErrorNum:=IMAP_Login(vHost;vUserName;vUserPassword;vImap_ID)
If($ErrorNum =0)
C_TEXT(vCapability)
$ErrorNum:=My_IMAP_Capability(vImap_ID)
...
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"
$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