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]);
    }
}