cxtcpcli.c
上传用户:sdtbys
上传日期:2009-12-06
资源大小:13k
文件大小:6k
源码类别:

并口编程

开发平台:

C/C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define Ret(M) memset(pk_out,' ',pk_out_len);strcpy(pk_out,M);
  4. #define pk_in_len   386
  5. #define pk_out_len  8
  6. int zhcx_tcpcli(char *pk_in,char *pk_out)
  7.   int sock; 
  8.   int ret; 
  9.   int time; 
  10.   char pkIP[30];
  11.   char pkPORT[10];
  12.   int count;
  13.   int len;
  14.   int i;
  15.   char out[79];
  16.   FILE *fp;
  17.   char filename[20];
  18.   
  19.   memset(pkIP,0,sizeof(pkIP));
  20.   memset(pkPORT,0,sizeof(pkPORT));
  21.   
  22.   memset(filename,0,20);
  23.   ShowId("cxtcpcli:zhcx");
  24.   GetEnv("/usr/zfmm/zfmm.cfg","[银河]IP",pkIP);
  25.   GetEnv("/usr/zfmm/zfmm.cfg","[银河]PORT",pkPORT);
  26.   /*取配置地址、端口*/
  27. #ifdef DEBUG
  28.  ShowMsg("pktcpcli open IP=%s PORT=%sn",pkIP,pkPORT);
  29. #endif
  30.   sock=sockClientOpen(pkIP,atoi(pkPORT)); /*连接*/
  31.   if (sock <0)
  32.   {
  33. #ifdef DEBUG
  34.     ShowMsg("不能正确连接支付密码前置机! error=%dn",sock);
  35. #endif
  36.     Ret("00004011");
  37.     return (0);
  38.   }
  39.   
  40. #ifdef DEBUG
  41.  LooKChar(pk_in,strlen(pk_in));
  42. #endif
  43.   ret=sockSend(sock,pk_in,strlen(pk_in));
  44.   if (ret <0)
  45.   {
  46. #ifdef DEBUG
  47.     ShowMsg("不能正确发送支付密码通讯包! error=%dn",ret);
  48. #endif
  49.     Ret("00004012");
  50.     sockClose(sock);
  51.     return (0);
  52.   }
  53.  if (TimeOut(sock,70)) 
  54.  {
  55. #ifdef DEBUG
  56.    ShowMsg("接收支付密码前置机输出数据操时!n");
  57. #endif
  58.    Ret("00004014");
  59.    sockClose(sock);
  60.    return(0);
  61.  }
  62.    
  63.  timeoutopen(70);
  64.  ret=sockRecv(sock,pk_out,pk_out_len);
  65.  time=timeoutclose();
  66.  if (time==0)
  67.  {
  68. #ifdef DEBUG
  69.    ShowMsg("接收支付密码前置机输出超时!n");
  70. #endif
  71.    Ret("00004015");
  72.    sockClose(sock);
  73.    return (0);
  74.  }
  75.  if (ret <0)
  76.  {
  77. #ifdef DEBUG
  78.    ShowMsg("不能正确接收支付密码前置机输出! error=%dn",ret);
  79. #endif
  80.    Ret("00004016");
  81.    sockClose(sock);
  82.    return (0);
  83.  }
  84.  
  85. #ifdef DEBUG
  86.  LooKChar(pk_out,pk_out_len);
  87. #endif
  88. /****************************/
  89.  count=(pk_out[0]-'0')*1000+(pk_out[1]-'0')*100+(pk_out[2]-'0')*10+(pk_out[3]-'0');
  90.  /*fprintf(stderr,"count=%dn",count);*/
  91.  if (count==0)
  92.     return (0);
  93.  len=79;
  94.  strcat(filename,"/tmp/zhcx");
  95.  strcat(filename,&pk_in[382]);
  96.  fp=fopen(filename,"w");
  97.  if (fp==NULL) return;
  98.  for(i=0;i<count;i++)
  99.  {
  100.    
  101.   timeoutopen(70);
  102.   ret=sockRecv(sock,out,len);
  103.   time=timeoutclose();
  104.   if (time==0)
  105.   {
  106. #ifdef DEBUG
  107.     ShowMsg("接收支付密码前置机输出超时!n");
  108. #endif
  109. goto end;
  110.   }
  111.   if (ret <0)
  112.   {
  113. #ifdef DEBUG
  114.     ShowMsg("不能正确接收支付密码前置机输出! error=%dn",ret);
  115. #endif
  116. goto end;
  117.   }
  118. #ifdef DEBUG
  119.   LooKChar(out,len);
  120. #endif
  121. fwrite(out,8,1,fp);
  122. fputc('|',fp);
  123. fwrite(&out[8],2,1,fp);
  124. fputc('|',fp);
  125. fwrite(&out[10],32,1,fp);
  126. fputc('|',fp);
  127. fwrite(&out[42],10,1,fp);
  128. fputc('|',fp);
  129. fwrite(&out[52],1,1,fp);
  130. fputc('|',fp);
  131. fwrite(&out[53],1,1,fp);
  132. fputc('|',fp);
  133. fwrite(&out[54],8,1,fp);
  134. fputc('|',fp);
  135. fwrite(&out[62],8,1,fp);
  136. fputc('|',fp);
  137. fwrite(&out[70],8,1,fp);
  138. fputc('|',fp);
  139. fwrite(&out[78],1,1,fp);
  140. fputc('n',fp);
  141.  }//for
  142. end:
  143.  fclose(fp);
  144. /***************************/
  145.  sockClose(sock);
  146.  return (0);
  147.    
  148. }
  149. int sbcx_tcpcli(char *pk_in,char *pk_out)
  150.   int sock; 
  151.   int ret; 
  152.   int time; 
  153.   char pkIP[30];
  154.   char pkPORT[10];
  155.   int count;
  156.   int len;
  157.   int i;
  158.   char out[52];
  159.   FILE *fp;
  160.   char filename[20];
  161.   
  162.   memset(pkIP,0,sizeof(pkIP));
  163.   memset(pkPORT,0,sizeof(pkPORT));
  164.   
  165.   memset(filename,0,20);
  166.   ShowId("cxtcpcli:sbcx");
  167.   GetEnv("/usr/zfmm/zfmm.cfg","[银河]IP",pkIP);
  168.   GetEnv("/usr/zfmm/zfmm.cfg","[银河]PORT",pkPORT);
  169.   /*取配置地址、端口*/
  170. #ifdef DEBUG
  171.  ShowMsg("pktcpcli open IP=%s PORT=%sn",pkIP,pkPORT);
  172. #endif
  173.   sock=sockClientOpen(pkIP,atoi(pkPORT)); /*连接*/
  174.   if (sock <0)
  175.   {
  176. #ifdef DEBUG
  177.     ShowMsg("不能正确连接支付密码前置机! error=%dn",sock);
  178. #endif
  179.     Ret("00004011");
  180.     return (0);
  181.   }
  182.   
  183. #ifdef DEBUG
  184.  LooKChar(pk_in,strlen(pk_in));
  185. #endif
  186.   ret=sockSend(sock,pk_in,strlen(pk_in));
  187.   if (ret <0)
  188.   {
  189. #ifdef DEBUG
  190.     ShowMsg("不能正确发送支付密码通讯包! error=%dn",ret);
  191. #endif
  192.     Ret("00004012");
  193.     sockClose(sock);
  194.     return (0);
  195.   }
  196.  if (TimeOut(sock,70)) 
  197.  {
  198. #ifdef DEBUG
  199.    ShowMsg("接收支付密码前置机输出数据操时!n");
  200. #endif
  201.    Ret("00004014");
  202.    sockClose(sock);
  203.    return(0);
  204.  }
  205.    
  206.  timeoutopen(70);
  207.  ret=sockRecv(sock,pk_out,pk_out_len);
  208.  time=timeoutclose();
  209.  if (time==0)
  210.  {
  211. #ifdef DEBUG
  212.    ShowMsg("接收支付密码前置机输出超时!n");
  213. #endif
  214.    Ret("00004015");
  215.    sockClose(sock);
  216.    return (0);
  217.  }
  218.  if (ret <0)
  219.  {
  220. #ifdef DEBUG
  221.    ShowMsg("不能正确接收支付密码前置机输出! error=%dn",ret);
  222. #endif
  223.    Ret("00004016");
  224.    sockClose(sock);
  225.    return (0);
  226.  }
  227.  
  228. #ifdef DEBUG
  229.  LooKChar(pk_out,pk_out_len);
  230. #endif
  231. /****************************/
  232.  count=(pk_out[0]-'0')*1000+(pk_out[1]-'0')*100+(pk_out[2]-'0')*10+(pk_out[3]-'0');
  233.  /*fprintf(stderr,"count=%dn",count);*/
  234.  if (count==0)
  235.     return (0);
  236.  len=52;
  237.  strcat(filename,"/tmp/sbcx");
  238.  strcat(filename,&pk_in[382]);
  239.  fp=fopen(filename,"w");
  240.  if (fp==NULL) return;
  241.  for(i=0;i<count;i++)
  242.  {
  243.    
  244.   timeoutopen(70);
  245.   ret=sockRecv(sock,out,len);
  246.   time=timeoutclose();
  247.   if (time==0)
  248.   {
  249. #ifdef DEBUG
  250.     ShowMsg("接收支付密码前置机输出超时!n");
  251. #endif
  252. goto end;
  253.   }
  254.   if (ret <0)
  255.   {
  256. #ifdef DEBUG
  257.     ShowMsg("不能正确接收支付密码前置机输出! error=%dn",ret);
  258. #endif
  259. goto end;
  260.   }
  261. #ifdef DEBUG
  262.   LooKChar(out,len);
  263. #endif
  264. fwrite(out,8,1,fp);
  265. fputc('|',fp);
  266. fwrite(&out[8],10,1,fp);
  267. fputc('|',fp);
  268. fwrite(&out[18],8,1,fp);
  269. fputc('|',fp);
  270. fwrite(&out[26],1,1,fp);
  271. fputc('|',fp);
  272. fwrite(&out[27],1,1,fp);
  273. fputc('|',fp);
  274. fwrite(&out[28],8,1,fp);
  275. fputc('|',fp);
  276. fwrite(&out[36],8,1,fp);
  277. fputc('|',fp);
  278. fwrite(&out[44],8,1,fp);
  279. fputc('n',fp);
  280.  }//for
  281. end:
  282.  fclose(fp);
  283. /***************************/
  284.  sockClose(sock);
  285.  return (0);
  286.    
  287. }