JP1/File Transmission Server/FTP(Windows(R)用)
使用例題として,登録済みの伝送カード(伝送カード名:CARD1〜3)を使用して,非同期の伝送要求の登録と,終了結果の取得をするサンプルプログラムを次に示します。例題は,Visual C++ 6.0の場合です。
図7-1 サンプルプログラムフローチャート
/**********************************************************/ /* 非同期伝送要求の登録と終了結果の取得サンプルプログラム */ /* (登録済カードを使用した場合) */ /**********************************************************/ #include <windows.h> #include <stdio.h> #include <winsock.h> #include <apihead.h> #define CARD1 "card1" #define CARD2 "card2" #define CARD3 "card3" #define FTS_EXECUTION 0 #define FTS_SUCCESS 1 #define FTS_MAX_RETRY 3 int main() { FTS_FTP_API_DATA_EX data1, data2, data3; /* 伝送情報構造体 */ FTS_FTP_API_RETDATA_EX ret_data; /* 伝送終了情報構造体 */ SOCKET sock; WSADATA WSAData; DWORD trno1, trno2, trno3; DWORD status; int flag1, flag2, flag3; int err_num; int i; /******************************************************/ /* ソケットルーチンの初期化(必ずコールしてください) */ /******************************************************/ status = WSAStartup( MAKEWORD(1,1), &WSAData ); if( status ) { /* エラー発生 */ printf( "WSAStartup() error number = %d\n", status ); return 1; } flag1 = FTS_EXECUTION; flag2 = FTS_EXECUTION; flag3 = FTS_EXECUTION; for( i = 0; i <= FTS_MAX_RETRY; i++ ) { if( i == 0 ) { printf( "Transmission is executed. \n" ); } else { printf( "Transmission is executed again.\n" ); } memset( &data1, 0, sizeof(FTS_FTP_API_DATA_EX) ); memset( &data2, 0, sizeof(FTS_FTP_API_DATA_EX) ); memset( &data3, 0, sizeof(FTS_FTP_API_DATA_EX) ); /**************************************************/ /* ファイル伝送サーバ/FTPとのコネクション確立 */ /**************************************************/ sock = fts_ftp_open( NULL ); if( sock == INVALID_SOCKET ) { /* エラー発生 */ err_num = WSAGetLastError(); printf( "fts_ftp_open() error!! error number = %d\n", err_num ); WSACleanup(); return 1; } /******************/ /* 伝送要求の登録 */ /******************/ if( flag1 == FTS_EXECUTION ) { if( !fts_ftp_asyn_request_ex( sock, CARD1, &data1, &trno1, FTS_GET_RETURN ) ) { /* エラー発生 */ err_num = WSAGetLastError(); printf( "fts_ftp_request_ex(1) error!! error number = %d\n", err_num ); } } if( flag2 == FTS_EXECUTION ) { if( !fts_ftp_asyn_request_ex( sock, CARD2, &data2, &trno2, FTS_GET_RETURN ) ) { /* エラー発生 */ err_num = WSAGetLastError(); printf( "fts_ftp_request_ex(2) error!! error number = %d\n", err_num ); } } if( flag3 == FTS_EXECUTION ) { if( !fts_ftp_asyn_request_ex( sock, CARD3, &data3, &trno3, FTS_GET_RETURN ) ) { /* エラー発生 */ err_num = WSAGetLastError(); printf( "fts_ftp_request_ex(3) error!! error number = %d\n", err_num ); } } /******************/ /* 終了結果の取得 */ /******************/ while(1) { if( !fts_ftp_event_ex( sock, &ret_data ) ) { err_num = WSAGetLastError(); if( err_num == FTS_API_ERROR_NODATA ) { /* すべての終了結果を取得した */ break; } else { /* エラー発生 */ printf( "fts_ftp_event_ex error!! error number = %d\n", err_num ); fts_ftp_close( sock ); WSACleanup(); return 1; } } if( flag1 == FTS_EXECUTION ) { if( ret_data.trno == trno1 ) { /* CARD1の終了 */ if( ret_data.trans_status == TRANS_SUCCESS ) { /* 伝送が正常終了 */ printf( "CARD1 trnas success!!\n" ); flag1 = FTS_SUCCESS; } else { /* 伝送が異常終了 */ printf( "CARD1 trnas failure!!\n" ); } continue; } } if( flag2 == FTS_EXECUTION ) { if( ret_data.trno == trno2 ) { /* CARD2の終了 */ if( ret_data.trans_status == TRANS_SUCCESS ) { /* 伝送が正常終了 */ printf( "CARD2 trnas success!!\n" ); flag2 = FTS_SUCCESS; } else { /* 伝送が異常終了 */ printf( "CARD2 trnas failure!!\n" ); } continue; } } if( flag3 == FTS_EXECUTION ) { if( ret_data.trno == trno3 ) { /* CARD3の終了 */ if( ret_data.trans_status == TRANS_SUCCESS ) { /* 伝送が正常終了 */ printf( "CARD3 trnas success!!\n" ); flag3 = FTS_SUCCESS; } else { /* 伝送が異常終了 */ printf( "CARD3 trnas failure!!\n" ); } continue; } } } /**************************************************/ /* ファイル伝送サーバ/FTPとのコネクション解放 */ /**************************************************/ fts_ftp_close( sock ); if( flag1 == FTS_SUCCESS && flag2 == FTS_SUCCESS && flag3 == FTS_SUCCESS ) { break; } } /****************************************************/ /* ソケットルーチンの解放(必ずコールしてください) */ /****************************************************/ WSACleanup(); printf( "Transmission is ended. \n" ); return 0; }
All Rights Reserved. Copyright (C) 2009, Hitachi, Ltd.