前のページ|次のページ

FILENAMEステートメント、SOCKETアクセス方式

TCP/IPソケットからの読み込みや書き込みができるようにします。

該当要素: 任意の場所
カテゴリ: データアクセス
制限事項: SASがロックダウン状態にある場合、FILENAMEステートメントのSOCKETアクセス方式は使用できません。サーバー管理者は、このアクセス方式がロックダウン状態でも使用できるように、同方式を再有効化できます。詳細については、XisError: No pubcode in link data found for lrconを参照してください。

構文

形式1:

形式2:

引数

fileref

有効なファイル参照名を指定します。

ヒント ファイル参照名と外部ファイルの関連付けは、SASセッション終了まで維持されるか、または他のFILENAMEステートメントで関連付けの変更や関連付けの取り消しを実行するまで維持されます。ファイルに対するファイル参照名は必要に応じて何度でも変更できます。

SOCKET

このアクセス方式を指定すると、TCP/IP (Transmission Control Protocol/Internet Protocol)ソケットからの読み込みやTCP/IPソケットへの書き込みを実行できます。

'hostname:portno'

ホスト名またはホストのIPアドレス、および接続先のTCP/IPポート番号を指定します。

ヒント クライアントからTCP/IPソケットへアクセスする場合は、この引数を指定します。

':portno'

リスン用に作成するポート番号を指定します。

ヒント サーバーモードには、この引数を指定します。
:0と指定すると、システムによってポート番号が選択されます。

SERVER

TCP/IPソケットをリスンソケットに設定します。システムを接続待機中のサーバーとして動作させることができます。

ヒント このシステムではすべての接続をシリアル形式で受け入れます。この形式では1度に1つの接続のみが有効になります。
参照項目 RECONN=オプション (TCPIPオプション)。

tcpip-options

サーバー側の接続許可数などオペレーティングシステム固有の詳細情報を指定します。

動作環境の情報: TCP/IPオプションの詳細については、各動作環境向けのSASドキュメントを参照してください。
参照項目 TCP/IPオプション

TCP/IPオプション

tcpip-options次の値のいずれかを指定できます。

BLOCKSIZE=blocksize

このblocksizeには、ソケットデータバッファのサイズをバイト単位で指定します。

デフォルト 8192

ENCODING=encoding-value

ソケットとの読み込みや書き込みに使用するエンコーディングを指定します。ENCODING=の値は、ソケットのエンコーディングが現在のセッションエンコーディングとは異なることを示しています。

ソケットからデータを読み込む場合は、指定したエンコーディングからセッションエンコーディングにデータがトランスコードされます。ソケットにデータを書き込む場合は、セッションエンコーディングから指定したエンコーディングにデータがトランスコードされます。
エンコーディングの有効な値については、XisError: No pubcode in link data found for nlsrefを参照してください。

LRECL=lrecl

このlreclには、論理レコード長を指定します。

デフォルト 256
操作 かわりに、XisError: No pubcode in link data found for lesysoptsrefを使用すると、グローバルな論理レコード長を指定できます。SAS 9.4では、グローバルLRECLシステムオプションのデフォルト値は32767です。固定長レコード(RECFM=F)を使用する場合、LRECLのデフォルト値は256になります。

RECFM=recfm

このrecfmには、次の3つのレコード形式のいずれかを指定します。

F

固定長レコード形式です。そのため、LRECLサイズのすべてのレコードには区切り文字となる改行が含まれていません。データはイメージ(バイナリ)モードで転送されます。

操作 SAS 9.4では、グローバルLRECLシステムオプションのデフォルト値は32767です。固定長レコード(RECFM=F)を使用する場合、LRECLのデフォルト値は256になります。

S

ストリームレコード形式です。

操作 読み込むデータ量は、現在のLRECLの値またはINFILEステートメントに指定したNBYTE=変数の値で制御されます。NBYTE=オプションには、読み込まれるデータ量に等しくなる変数を指定します。このデータ量は、LRECLに指定した値に等しいか、それ以下の値にする必要があります。
ヒント データはイメージ(バイナリ)モードで転送されます。
参照項目 INFILEステートメントのNBYTE=オプション

V

可変長レコード形式(デフォルト設定)です。

ヒント この形式では、レコードの長さが異なります。また、レコードはテキスト(ストリーム)モードで転送されます。
LRECLの値よりも大きいレコードは切り捨てられます。
デフォルト V

RECONN=conn-limit

このconn-limitにはサーバー側で許可する最大接続数を指定します。

有効にできるのは1度に1つの接続だけなので、サーバーで他の接続を許可する前に現在の接続を切断する必要があります。新しい接続が許可されると、EOV=変数が1に設定されます。サーバーはconn-limitに指定された値に達するまで、1度に1つの接続を許可します。

TERMSTR='eol-char'

このeol-char には、RECFM=Vを指定した場合に使用する改行文字を指定します。次の3つの値を使用できます。

CRLF

ラインフィード(LF)が後に続くキャリッジリターン(CR)

LF

ラインフィードのみ(デフォルト設定)

NULL

NULL文字(0x00)

デフォルト LF
制限事項 このオプションはRECFM=Vを指定した場合にのみ使用します。

詳細

基本

TCP/IPソケットとは、2つのアプリケーション間の通信接続です。サーバーアプリケーションがソケットを作成し、接続を待機します。クライアントアプリケーションはこのソケットに接続します。SOCKETアクセス方式を使用すると、SASを使用してソケット上にあるアプリケーションとクライアントモードまたはサーバーモードで通信することができます。クライアントアプリケーションとサーバーアプリケーションは同じコンピュータ上に存在していても、ネットワークで接続されている別のコンピュータ上に存在していてもかまいません。
たとえば、TCP/IPソケットを使用したSASセッションと通信するアプリケーションをMicrosoft Visual Basicを使用して開発することができます。Visual Basicでは、ここで使用するTCP/IPはサポートされていません。ただし、SASテクニカルサポートから無料でカスタムコントロール(VBX)を入手できます。このカスタムコントロールを使用すると、Visual Basicアプリケーションでソケットを介した通信を実行できるようになります。

クライアントモードでSOCKETアクセス方式を使用する(形式1)

クライアントモードでは、ローカルSASアプリケーションは、サーバーとして稼働している(また、接続を待機している)リモートアプリケーションとSOCKETアクセス方式を使用して通信できます。サーバーに接続する前に、次を確認する必要があります。
  • サーバーを稼働しているホストコンピュータのネットワーク名またはIPアドレス
  • リモートアプリケーションが新しい接続をリスンするポート番号
リモートアプリケーションには別のSASアプリケーションを指定できますが、SASアプリケーションである必要はありません。ローカルSASアプリケーションがTCP/IPソケットを使用してリモートアプリケーションに接続すると、この2つのアプリケーションは通信を実行し、外部ファイルと同じようにソケットとの読み込みや書き込みを行うことができます。リモート側のソケットの接続が切断されると、ローカル側も自動的に接続を終了します。

サーバーモードでSOCKETアクセス方式を使用する(形式2)

ローカルSASアプリケーションをサーバーモードで使用すると、リモートアプリケーションが接続するまで待機状態になります。サーバーモードでSOCKETアクセス方式を使用するには、サーバー側で接続をリスンするポート番号のみを確認する必要があります。通常、サーバーは一般的なポートを使用して接続をリスンします。このポート番号は特定のサーバーアプリケーション向けにシステムで予約されています。システムで一般的なポートを定義する方法の詳細については、TCP/IPソフトウェアのドキュメントを参照するか、システム管理者に問い合わせてください。
サーバーアプリケーションで一般的なポートを使用しない場合、ローカルアプリケーションからソケットとの接続を確立するときにシステムによってポート番号が割り当てられます。ただし、サーバーへの接続を待機しているクライアントアプリケーションではポート番号を特定する必要があるため、一般的なポート番号を使用するようにしてください。
ローカルのSASサーバーアプリケーションが接続を待機している間、SASは待機状態になります。新しい接続が確立されるたびに、DATAステップのEOV=変数が1に設定されます。サーバーで許可する接続は1度に1つだけなので、現在の接続が終了するまで新しい接続は確立されません。リモートクライアントアプリケーションの接続が切断されると、接続は自動的に終了します。SOCKETアクセス方式は、RECONNオプションに設定した最大数に達するまで新しい接続を受け入れます。

例: TCP/IPソケットを使用した2つのSASアプリケーション間の通信

この例では、TCP/IPソケットを使用して2つのアプリケーションが通信する方法を示します。ローカルアプリケーションがサーバーモードに設定されています。リモートアプリケーションがサーバーに接続するクライアントモードに設定されています。この例では、サーバーのホスト名はhp720.unx.sas.com、一般的なポート番号は5000とします。また、サーバーはソケットを終了する前に最大3つの接続を許可します。
サーバーアプリケーション側のプログラムを次に示します。
filename local socket ':5000' server reconn=3;
   /*The server is using a reserved */
   /*port number of 5000.           */ 
data tcpip;
   infile local eov=v;
   input x $10;
   if v=1 then
      do;              /* new connection when v=1 */
         put 'new connection received';
      end;
   output;
run;
クライアントアプリケーション側のプログラムを次に示します。
filename remote socket 'hp720.unx.sas.com:5000';
data _null_;
   file remote;
   do i=1 to 10;
      put i;
   end;
run;

関連項目:

前のページ|次のページ|ページの先頭へ