JP1/File Transmission Server/FTP(Windows(R)用)
JP1/FTP APIライブラリは,JP1/FTPのファイル伝送機能をユーザプログラムから利用するときに使用します。
JP1/FTP APIライブラリを使用して,次のことができます。
- 一つのユーザプログラムから複数のホスト上(同一ホストでもよい)で動作する複数のJP1/FTPに伝送要求を登録できます。
- 伝送要求の登録には,同期型と非同期型があります。
同期型:伝送が終了するまで待ち,終了結果を取得できます。
非同期型:登録だけをして,あとで終了結果だけを取得できます。
JP1/FTPが提供する関数を使用するために必要なものを次に示します。
- JP1/FTP APIライブラリ
- コンパイラー:Visual C++
ヘッダファイルおよびインポートライブラリについては,「付録A ファイルおよびディレクトリ一覧」を参照してください。
SERVICESの設定
JP1/FTP Clientのサービス名「ftsc」を設定します。詳しくは,「2.2.2 ポート番号を設定する」を参照してください。
HOSTSの設定
クライアント側のJP1/FTPが動作しているホストのホスト名とIPアドレスを設定します。このホスト名はfts_ftp_open()の第1引数,伝送情報構造体で指定します。
OSのインストールディレクトリ\system32\drivers\etc\HOSTSに次の1行を追加してください。
xxx.xxx.xxx.xxx yyyyyy
- (凡例)
- xxx.xxx.xxx.xxx:IPアドレス
- yyyyyy:ホスト名
伝送情報の指定
ファイル伝送要求の登録は,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 cmd; int mode; char quote[300+1]; char localname[260+1]; char remotename[260+1]; char end_program[260+1]; char abend_program[260+1]; char comment[80+1]; int fsize; char reserve[1240]; /*予約領域*/ } 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 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_MLT_MULTIPLE 複数ファイル伝送をします。 FTS_MLT_SINGLE 単一ファイル伝送をします。 FTS_MLT_AUTOでは,次のように伝送が自動切り替えされます。 送信の場合:ローカルファイル名に,*または?が使用されている か判定し,*または?が使用されていれば複数ファイ ル伝送に,使用されていなければ単一ファイル伝送 に切り替わります。 受信の場合:リモートファイル名に,*または?が使用されている か判定し,*または?が使用されていれば複数ファイ ル伝送に,使用されていなければ単一ファイル伝送 に切り替わります。 (例) 単一ファイルの受信 cmd = FTS_CMD_RECV | FTS_MLT_SINGLE; mode :圧縮伝送の指定します。 FTS_MODE_S 圧縮伝送をしません。 FTS_MODE_C 圧縮伝送をします。 quote :実行したいFTPコマンドを指定します。 CWD,SITEなどのコマンドをセミコロン(';')で 区切った文字列(文字列の最後は'\0') 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 サイズ確認をしません。
- 注意事項
- 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引数に伝送終了情報構造体のアドレスを指定します。
- 伝送終了情報構造体(IPF以外の場合)
typedef struct _FTS_FTP_API_RETDATA_EX { /* 常時のデータ */ int trans_status; /* 伝送終了状態 成功(TRANS_SUCCESS) */ /* 伝送終了情報 失敗(TRANS_FAILURE) */ char cardname[20+1]; /* カード名称 */ unsigned long trno; /* 伝送番号 */ unsigned long trcno; /* 接続番号 */ /* 伝送成功時のデータ */ unsigned long trans_size; /* 伝送データサイズ */ /* 伝送(圧縮)成功時のデータ */ unsigned long trans_size_comp; /* 圧縮後伝送データサイズ */ /* 失敗時のデータ */ int ab_kind; /* システムコールエラー(FTS_ERR_SYSTEM) */ /* 論理エラー(FTS_ERR_LOGIC) */ /* プロトコルエラー(FTS_ERR_PROTOCOL) */ 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]; /* プロトコルメッセージ(エラー) */ /* 4ギガバイトを超えた伝送成功時のデータ */ DWORD trans_size_Low; /* 伝送データサイズ(下位32ビットの値)*/ LONG trans_size_High; /* 伝送データサイズ(上位32ビットの値)*/ /* 4ギガバイトを超えた伝送(圧縮)成功時のデータ */ DWORD trans_size_comp_Low; /* 圧縮後伝送データサイズ(上位32ビットの値)*/ LONG trans_size_comp_High; /* 圧縮後伝送データサイズ(下位32ビットの値)*/ char reserve[1668]; /* 予約領域 */ } FTS_FTP_API_RETDATA_EX;
- 伝送終了情報構造体(IPFの場合)
typedef struct _FTS_FTP_API_RETDATA_EX { /* 常時のデータ */ int trans_status; /* 伝送終了状態 成功(TRANS_SUCCESS) */ /* 伝送終了情報 失敗(TRANS_FAILURE) */ char cardname[20+1]; /* カード名称 */ unsigned long trno; /* 伝送番号 */ unsigned long trcno; /* 接続番号 */ /* 伝送成功時のデータ */ __int64 trans_size; /* 伝送データサイズ */ /* 伝送(圧縮)成功時のデータ */ __int64 trans_size_comp; /* 圧縮後伝送データサイズ */ /* 失敗時のデータ */ int ab_kind; /* システムコールエラー(FTS_ERR_SYSTEM) */ /* 論理エラー(FTS_ERR_LOGIC) */ /* プロトコルエラー(FTS_ERR_PROTOCOL) */ 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]; /* プロトコルメッセージ(エラー) */ char reserve[1684]; /* 予約領域 */ } 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(プロトコルエラー) 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ビットの値を返 します。
- コーディング時の注意事項
JP1/FTP APIライブラリの関数を使用する前後に,必ず次の関数をコールしてください。
- コール前
WSAStartUp() winsockライブラリ
- コール後
この関数をコールしない場合,ライブラリの関数は正しく動作しません。使用方法については,winsockのマニュアルを参照してください。
WSACleanUp() winsockライブラリ
trans_size_Lowとtrans_size_Highは,二つのパラメータを組み合わせて一つの64ビット値を形成します。
trans_size_comp_Lowとtrans_size_comp_Highは,二つのパラメータを組み合わせて一つの64ビット値を形成します。
ライブラリの関数を使用したプログラムを作成する場合は,FTSFTP.LIBをリンクしてください。
ライブラリ使用時の注意事項
- 次のような使用方法はできません。
- 1プロセスで,マルチスレッドによって複数のfts_ftp_open()を同時に発行
- 一つのfts_ftp_open()で複数のfts_ftp_syn_request_ex(),fts_ftp_asyn_request_ex()を同時に発行(マルチスレッドによるfts_ftp_syn_request_ex(),fts_ftp_asyn_request_ex()の同時実行)
- JP1/FTPをバージョンアップした場合,新しいライブラリとヘッダで再コンパイルが必要です。
- ワイルドカード指定した場合,fts_ftp_event_ex()で取得できる伝送終了情報は,次のとおりです。
正常の場合:最後に伝送したファイルの伝送終了情報
異常の場合:最初に異常になったファイルの伝送終了情報
All Rights Reserved. Copyright (C) 2006, 2008, Hitachi, Ltd.