JP1/File Transmission Server -全銀TCP
使用例題として,次のサンプルプログラムを示します。
/**********************************************************/ /* 同期型サンプルプログラム */ /**********************************************************/ #include <stdio.h> #include "ztc.h" void main() { struct ztc_tran_label_t test_label[2]; int errcode[2]; int rtn; strcpy(test_label[0].label, "sendfile1"); strcpy(test_label[1].label, "sendfile2"); rtn = ZTC_Syn_trans("remotehost1", NULL, test_label, NULL, 2, errcode); if(rtn == ZTC_SUCCESS) { printf("sendfile1とsendfile2は正常に伝送できました。\n"); } else { printf("sendfile1とsendfile2の伝送中にエラーが発生しました。\n"); printf("rtn = %d errcode[0] = %d errcode[1] = %d \n", rtn, errcode[0], errcode[1]); } }
/**********************************************************/ /* 非同期型サンプルプログラム */ /**********************************************************/ #include <errno.h> #include <stdio.h> #include <sys/time.h> #include "ztc.h" fd_set readfds; fd_set writefds; void main() { /* 変数定義 */ int multin; int filen; /* ファイル多重度(MAX64) */ int fdv[200]; /* 非同期伝送ディスクリプター格納領域 */ struct ztc_tran_label_t file_labels[64]; /* ファイルラベル名配列 */ struct timeval timeoutx; /* 監視タイマー */ int rc1,rc2,rc3,rc4; /* 関数戻り値 */ int errcode[64]; /* 伝送結果コード */ int i,j,k; int cnt1,cnt2,flag1; /* 変数初期化 */ multin = 2; filen = 1; for(i=0;i < multin;i++){ fdv[i] = -1; } sprintf(file_labels[0].label, "sendfile1"); sprintf(file_labels[1].label, "sendfile2"); /* 伝送要求の登録 */ for(i=0;i < multin;i++){ rc2 = 0; rc2 = ZTC_Asyn_trans("remotehost1", /* 相手局ラベル名 */ NULL, /* 相手局情報定義一部変更情報 */ &file_labels[i], /* ファイルラベル名配列 */ NULL, /* ファイル情報定義一部変更情報 */ filen, /* 要求伝送ファイル数 */ &fdv[i]); /* 非同期伝送ディスクリプター配列*/ if (rc2 != ZTC_SUCCESS) { printf("ZTC_Asyn_trans 関数エラー cnt = %d, rc = %d\n", i, rc2); fdv[i] = -1; } } timeoutx.tv_sec=2; timeoutx.tv_usec=0; rc3 = 0; while(rc3 < 1){ cnt1 = 0; printf("select"); /* 監視対象のセット */ FD_ZERO(&readfds); FD_ZERO(&writefds); for(i=0;i < multin;i++){ if(fdv[i] != -1){ FD_SET(fdv[i], &readfds); FD_SET(fdv[i], &writefds); printf("%02d", fdv[i]); cntl++; } } if(cnt1 == 0){ printf("end.\nRequest completed.\n"); break; /* exit */ } printf("\n"); fflush(stdout); /* 事象の完了待ち */ rc3 = select(multin+4, &readfds, &writefds, 0, &timeoutx); printf("rc=%d\n",rc3); if(rc3 == 0){ printf("no event (select timeout)\n"); }else if(rc3 < -1){ printf("select error errno=%d\n", errno); break; /* exit */ }else{ cnt2 = rc3; /* 発生事象数 */ for (k=0;k < cnt2;k++) for(i=0; < multin;i++){ if(fdv[i] == -1) continue; flag1 = 0; if(FD_ISSET(fdv[i], &readfds) != 0){ printf("read %02d.",fdv[i]); FD_CLR(fdv[i], &readfds); flag1 = 1; }else if(FD_ISSET(fdv[i], &writefds) != 0){ printf("write %02d.",fdv[i]); FD_CLR(fdv[i], &writefds); flag1 = 1; } if(flag1 == 0) continue; /* 伝送終了確認 */ rc4 = ZTC_Even(fdv[i], errcode); if(rc4 != ZTC_SUCCESS){ printf("ZTC_Even 関数 エラー rc=%d\n", rc4); }else{ printf("ZTC_Even"); for(j=0;j < filen;j++); { printf("%02d.", errcode[j]); } printf("\n"); fflush(stdout); } fdv[i] = -1; break; } rc3 = 0; } } }
/**********************************************************/ /* 伝送情報定義一部変更機能サンプルプログラム */ /**********************************************************/ #include <stdio.h> #include <stdlib.h> #include "ztc.h" void main() { struct ztc_tran_label_t test_label[2]; int errcode[2]; int rtn; struct change_host_define_t host_define; struct change_file_define_t file_define; /* 構造体の初期化 */ memset(&host_define, '\0', sizeof(host_define)); memset(&file_define, '\0', sizeof(file_define)); /* 相手局情報定義の変更を指示する */ strcpy(host_define.exec, "/users/JP1ZTC/TEST/test_suite/uap/h_pro1"); host_define.exec_opt[0] = ZTC_RRTN; host_define.exec_opt[1] = ZTC_REQNO; host_define.exec_opt[2] = 0; strcpy(host_define.remote_code, "0x12345678902222"); strcpy(host_define.open_req_pass, "ABCDEF"); strcpy(host_define.ipaddr, "200.0.0.1"); host_define.text_ack_cnt = 7; host_define.changeflg = ZTC_CHANGE_HOST_DEF_EXEC | ZTC_CHANGE_HOST_DEF_EXEC_OPT | ZTC_CHANGE_HOST_DEF_REMOTE_CODE | ZTC_CHANGE_HOST_DEF_OPEN_REQ_PASS | ZTC_CHANGE_HOST_DEF_IPADDR | ZTC_CHANGE_HOST_DEF_TEXT_ACK_CNT; /* ファイル情報定義の変更を指示する */ file_define.exec_opt[0] = ZTC_RRTN; file_define.exec_opt[1] = ZTC_REQNO; file_define.exec_opt[2] = 0; strcpy(file_define.real_file_name, "/users/JP1ZTC/TEST/test_suite/DATA/sendfile1.txt"); strcpy(file_define.trans_file_name, "502000010101"); file_define.changeflg = ZTC_CHANGE_FILE_DEF_EXEC_OPT | ZTC_CHANGE_FILE_DEF_REAL_FILE_NAME | ZTC_CHANGE_FILE_DEF_TRANS_FILE_NAME; strcpy(test_label[0].label, "sendfile1"); rtn = ZTC_Syn_trans("remotehost1", &host_define, test_label, &file_define, 1, errcode); if(rtn == ZTC_SUCCESS){ printf("sendfile1は正常に伝送できました。\n"); }else{ printf("sendfile1の伝送中にエラーが発生しました。\n"); printf("rtn = %d errcode[0] = %d errcode[1] = %d \n", rtn, errcode[0], errcode[1]); } }
All Rights Reserved. Copyright (C) 2009, 2011, Hitachi, Ltd.