ライブラリの使用方法
JP1/FTP APIライブラリは,JP1/FTPのファイル伝送機能をユーザプログラムから利用するときに使用します。
JP1/FTP APIライブラリを使用して,次のことができます。
-
1つのユーザプログラムから複数のホスト上(同一ホストでもよい)で動作する複数のJP1/FTPに伝送要求を登録できます。
-
伝送要求の登録には,同期型と非同期型があります。
同期型:伝送が終了するまで待ち,終了結果を取得できます。
非同期型:登録だけをして,あとで終了結果だけを取得できます。
- 〈このページの構成〉
関数を使用するための前提条件
JP1/FTPが提供する関数を使用するために必要なものを次に示します。
ユーザプログラムで使用できる言語を次に示します。
-
C
-
C++
JP1/FTP APIライブラリが前提とするコンパイラーを次に示します。
コンパイラー |
種別 |
ヘッダファイル |
インポートライブラリ |
---|---|---|---|
Visual Studio 2012 |
32ビット用 |
apihead.h |
FTSFTP110.lib |
64ビット用 |
apihead.h |
FTSFTP110_x64.lib |
|
Visual Studio 2013 |
32ビット用 |
apihead.h |
FTSFTP120.lib |
64ビット用 |
apihead.h |
FTSFTP120_x64.lib |
ヘッダファイルおよびインポートライブラリの格納先は,「付録A ファイルおよびディレクトリ一覧」を参照してください。なお,ヘッダファイルとインポートライブラリをJP1/FTPがインストールされていない環境にコピーしてユーザプログラムを作成することは可能です。また,Visual Studio自体をインストールできるOSは,Visual Studioの仕様に依存します。
環境設定
SERVICESの設定
JP1/FTP Clientのサービス名「ftsc」を設定します。詳しくは,「2.2.3 ポート番号を設定する」を参照してください。
HOSTSの設定
クライアント側のJP1/FTPが動作しているホストのホスト名とIPアドレスを設定します。このホスト名は接続情報構造体,伝送情報構造体で指定します。
OSのインストールディレクトリ\system32\drivers\etc\HOSTSに次の1行を追加してください。
xxx.xxx.xxx.xxx yyyyyy
- (凡例)
-
xxx.xxx.xxx.xxx:IPアドレス
yyyyyy:ホスト名
コーディング
JP1/FTPとのコネクション確立情報の指定
JP1/FTP Clientサービスとのコネクション確立は,fts_ftp_open_ex()の引数に接続情報構造体のアドレスを設定します。
-
接続情報構造体
typedef struct _FTS_FTP_API_CONN_DATA { char hostname[256+1]; /* ホスト名 (クライアント) */ int priority; /* 優先IPバージョン */ char reserve[1784]; /* 予約領域 */ } FTS_FTP_API_CONN_DATA;
-
接続情報構造体メンバの内容
-
hostname:JP1/FTP Clientサービスが動作しているホストのホスト名またはIPアドレスを指定します。IPアドレスの場合,IPv4またはIPv6アドレスを指定できます。NULLを指定した場合は,自ホスト名(OSのhostnameコマンドが返すホスト名:物理ホスト)が仮定されます。
FTPクライアントでの自IPアドレスの指定を有効にした場合,この引数での指定がFTPクライアントの自IPアドレスになります。
NULLを指定した場合は,FTPクライアントの物理ホストが仮定されます。
FTPクライアントでの自IPアドレスの指定を無効にした場合,FTPクライアントの自IPアドレスは,OSが自動的に割り当てるアドレスになります。FTPクライアントでの自IPアドレスの指定を有効にする定義については,「3.11 複数IPアドレス環境での使用」を参照してください。
-
priority:優先するインターネットプロトコルバージョンを指定します。
FTS_AF_INET:IPv4を優先します。
FTS_AF_INET6:IPv6を優先します。
上記以外の場合,FTS_AF_INETを仮定します。
-
reserve:予約領域です。「\0」で初期化してください。
- 注意事項
-
char型の変数値の最後は,「\0」にしてください。
-
伝送情報の指定
ファイル伝送要求の登録は,fts_ftp_syn_request_ex(),fts_ftp_asyn_request_ex()の引数に登録済みの伝送カード名や伝送情報構造体のアドレスを設定します。
-
カード名称による伝送要求の登録
[伝送の登録/実行]で登録した伝送カード名を指定することで,伝送要求を登録できます。
-
伝送情報構造体による伝送情報の指定
伝送に必要な情報を指定することで,伝送要求を登録できます。
-
伝送情報構造体
typedef struct _FTS_FTP_API_DATA_EX { char cardname[20+1]; /* カード名称 */ char host[256+1]; /* 相手ホスト名 */ unsigned int portnum; /* ポート番号 */ char username[50+1]; /* 相手ユーザ名 */ char password[50+1]; /* パスワード */ int type; /* 伝送モード */ int mode; /* 圧縮モード */ int cmd; /* 送受信種別 */ char quote[300+1]; /* FTPコマンド */ char localname[260+1]; /* ローカルファイル名 */ char remotename[260+1]; /* リモートファイル名 */ char end_program[260+1]; /* 正常時起動プログラム名 */ char abend_program[260+1]; /* 異常時起動プログラム名 */ char comment[80+1]; /* コメント */ int fsize; /* サイズ確認 */ int ftps; /* FTPS使用 */ int scertval; /* サーバ証明書有効期限確認 */ char cacertpath[260+1]; /* CA証明書パス名 */ char crlpath[260+1]; /* CRLパス名 */ char reserve[708]; /* 予約領域 */ } FTS_FTP_API_DATA_EX;
-
伝送情報構造体メンバの内容
-
cardname:カード名称を指定します。
-
host:FTPのホスト名を指定します。ftp>open aaaa
-
portnum:FTPのポート番号を指定します。ftp>open aaaa bbbb
-
username:ログイン名を指定します。ftp>user aaaa
-
password:パスワードを指定します。
-
type:伝送モードを指定します。
FTS_TYPE_A:データをASCIIコードと解釈し,送信します。ftp>ascii
FTS_TYPE_I:データをイメージと解釈し,送信します。ftp>binary
-
mode:圧縮伝送を指定します。
FTS_MODE_S:圧縮伝送をしません。
FTS_MODE_C:圧縮伝送をします。
-
cmd:伝送の種類を指定します。
単/複伝送をORで指定することで,単一ファイル伝送または複数ファイル伝送を組み合わせて指定できます。
ただし,この指定は受信の場合だけ有効です。
伝送の種類
FTS_CMD_SEND:送信します。ftp>put aaaa bbbb
FTS_CMD_RECV:受信します。ftp>get cccc ddddd
FTS_CMD_APPE:送信(追加)します。ftp>append eeee fffff
単/複伝送
FTS_MLT_AUTO:単一ファイル伝送と複数ファイル伝送を自動で切り替えます。デフォルトです。伝送の種類がFTS_CMD_SENDまたはFTS_CMD_APPEのときは,FTS_MLT_AUTOを指定してください。
FTS_MLT_MULTIPLE:複数ファイル伝送をします。
FTS_MLT_SINGLE:単一ファイル伝送をします。
FTS_MLT_AUTOでは,次のように伝送が自動切り替えされます。
送信の場合:ローカルファイル名に,*または?が使用されているか判定し,*または?が使用されていれば複数ファイル伝送に,使用されていなければ単一ファイル伝送に切り替わります。
受信の場合:リモートファイル名に,*または?が使用されているか判定し,*または?が使用されていれば複数ファイル伝送に,使用されていなければ単一ファイル伝送に切り替わります。
(例)
単一ファイルの受信
cmd = FTS_CMD_RECV | FTS_MLT_SINGLE;
-
quote:実行したいFTPコマンドを指定します。
CWD,SITEなどのコマンドをセミコロン(';')で区切った文字列(文字列の最後は'\0')
指定できるコマンドは,データコネクションを確立しないコマンドに限られます。また,FTPサーバ側でコマンドが実行可能かどうかは,FTPサーバに依存します。
-
localname:ローカルファイル名を指定します。
(例)
ftp>put aaaa bbbb
ftp>get cccc dddd
-
remotename:リモートファイル名を指定します。
(例)
ftp>put aaaa bbbb
ftp>get cccc dddd
-
end_program:伝送正常終了時に起動するプログラム名をフルパスで指定します。
-
abend_program:伝送異常終了時に起動するプログラム名をフルパスで指定します。
-
comment:任意の文字列を指定できます。
-
fsize:伝送後のファイルサイズ確認の有無を指定します。
FTS_FSIZE_TRUE:サイズ確認をします。
FTS_FSIZE_FALSE:サイズ確認をしません。
-
ftps:FTPS使用の有無を指定します。
FTS_FTPS_TRUE:FTPSを使用します。
FTS_FTPS_FALSE:FTPSを使用しません。
-
scertval:サーバ証明書の有効期限確認の有無を指定します。
FTS_SCVAL_TRUE:有効期限確認をします。
FTS_SCVAL_FALSE:有効期限確認をしません。
-
cacertpath:CA証明書ファイルのパス名をフルパスで指定します。
-
crlpath:CRLファイルのパス名をフルパスで指定します。
-
reserve:予約領域です。「\0」で初期化してください。
- 注意事項
-
char型の変数値の最後は,「\0」にしてください。
-
伝送終了情報の取得
fts_ftp_syn_request_ex(),fts_ftp_asyn_request_ex()で登録した伝送要求に対する終了情報を取得できます。
-
fts_ftp_syn_request_ex()で要求を登録した場合
fts_ftp_syn_request_ex()の第4引数に伝送終了情報構造体のアドレスを指定します。
-
fts_ftp_asyn_request_ex()で要求を登録した場合
fts_ftp_event_ex()の第2引数に伝送終了情報構造体のアドレスを指定します。
-
伝送終了情報構造体
typedef struct _FTS_FTP_API_RETDATA_EX { /* 常時のデータ */ int trans_status; /* 伝送終了状態 成功(TRANS_SUCCESS) */ /* 伝送終了情報 失敗(TRANS_FAILURE) */ char cardname[20+1]; /* カード名称 */ unsigned long trno; /* 伝送番号 */ unsigned long trcno; /* 接続番号 */ /* 伝送成功時のデータ */ #ifdef FTS_API_64BIT unsigned __int64 trans_size; /* 伝送データサイズ */ unsigned __int64 trans_size_comp; /* 圧縮後伝送データサイズ */ #else unsigned long trans_size; /* 伝送データサイズ */ unsigned long trans_size_comp; /* 圧縮後伝送データサイズ */ #endif /* 伝送失敗時のデータ */ int ab_kind; /* システムコールエラー(FTS_ERR_SYSTEM) */ /* 論理エラー(FTS_ERR_LOGIC) */ /* プロトコルエラー(FTS_ERR_PROTOCOL) */ /* SSL通信エラー(FTS_ERR_SSL) */ char ab_place[8]; /* エラー発生場所 */ char ab_func[32]; /* エラー発生モジュール名称 */ char ab_system[32]; /* システムコール名称 */ int ab_syskind; /* システムコール種別 */ /* Win32 API(FTS_SYSKIND_WIN32) */ /* C runtime(FTS_SYSKIND_CRUNTIME) */ /* WinSock API(FTS_SYSKIND_WINSOCK) */ unsigned long ab_errno; /* エラー番号 */ char ab_promes[256]; /* プロトコルメッセージ(エラー) */ #ifndef FTS_API_64BIT /* 4ギガバイトを超えた伝送成功時のデータ */ DWORD trans_size_Low; /* 伝送データサイズ(下位32ビットの値)*/ LONG trans_size_High; /* 伝送データサイズ(上位32ビットの値)*/ DWORD trans_size_comp_Low; /* 圧縮後伝送データサイズ(上位32ビットの値)*/ LONG trans_size_comp_High; /* 圧縮後伝送データサイズ(下位32ビットの値)*/ #endif int ab_sslerno; /* SSL通信エラー番号 */ char reserve[1664]; /* 予約領域 */ } FTS_FTP_API_RETDATA_EX;
-
伝送終了情報構造体メンバの内容
-
trans_status:伝送の終了状態を示す次の値を返します。
TRANS_SUCCESS(正常終了)
TRANS_FAILURE(異常終了)
-
cardname:伝送のカード名称を返します。
-
trno:伝送番号を返します。
-
trcno:接続番号を返します。
-
trans_size:(正常終了時だけ)
伝送データサイズ
-
trans_size_comp:(正常終了時だけ)
伝送データサイズ(圧縮)
-
ab_kind:(異常終了時だけ)
エラー種別を返します。
FTS_ERR_SYSTEM(システムコールエラー)
FTS_ERR_LOGIC(論理エラー)
FTS_ERR_PROTOCOL(プロトコルエラー)
FTS_ERR_SSL(SSL通信エラー)
-
ab_place:(異常終了時だけ)
エラー発生場所を返します。
-
ab_func:(異常終了時だけ)
エラー発生モジュール名称を返します。
-
ab_system:(異常終了時だけ)
システムコール名称を返します。
-
ab_syskind:(異常終了時だけ)
システムコール種別を返します。
FTS_SYSKIND_WIN32(Win32 API)
FTS_SYSKIND_CRUNTIME(C runtime)
FTS_SYSKIND_WINSOCK(WinSock API)
-
ab_errno:(異常終了時だけ)
システムコールエラー番号を返します。
-
ab_promes:(異常終了時だけ)
FTPサーバより送られてきたプロトコルメッセージを返します。
-
trans_size_Low:(正常終了時だけ)
伝送データサイズの下位32ビットの値を返します。
-
trans_size_High:(正常終了時だけ)
伝送データサイズの上位32ビットの値を返します。
-
trans_size_comp_Low:(正常終了時だけ)
圧縮後の伝送データサイズの下位32ビットの値を返します。
-
trans_size_comp_High:(正常終了時だけ)
圧縮後の伝送データサイズの上位32ビットの値を返します。
-
ab_sslerno:(異常終了時だけ)
SSL通信エラー番号を返します。
-
reserve:予約領域です。
-
-
JP1/FTP APIライブラリの関数を使用する前後に,必ず次の関数をコールしてください。
-
コール前
WSAStartUp() winsock2ライブラリ
-
コール後
WSACleanUp() winsock2ライブラリ
この関数をコールしない場合,ライブラリの関数は正しく動作しません。使用方法については,MSDNのマニュアルを参照してください。
trans_size_Lowとtrans_size_Highは,2つのパラメータを組み合わせて1つの64ビット値を形成します。
trans_size_comp_Lowとtrans_size_comp_Highは,2つのパラメータを組み合わせて1つの64ビット値を形成します。
-
ライブラリ使用時の注意事項
-
次のような使用方法はできません。
-
1プロセスで,マルチスレッドによって複数のfts_ftp_open_ex()を同時に発行
-
1つのfts_ftp_open_ex()で複数のfts_ftp_syn_request_ex(),fts_ftp_asyn_request_ex()を同時に発行(マルチスレッドによるfts_ftp_syn_request_ex(),fts_ftp_asyn_request_ex()の同時実行)
-
-
ワイルドカード指定した場合,取得できる伝送終了情報は,次のとおりです。
正常の場合:最後に伝送したファイルの伝送終了情報
異常の場合:最初に異常になったファイルの伝送終了情報