zoukankan      html  css  js  c++  java
  • 【性能测试】:关于Sockets协议的脚本的开发

    一,关于Sockets协议的脚本,首先对报文的解析是一个关键,

    报文的解析一般对着接口文档,弄清楚每个字段代表什么意思,如下一段报文,放在data.ws中

    "x00x00x01x5C" // 报文长度348=15c,加上自己总长度
    "1"
    "0"
    "500001"
    "0"
    "AUMS"
    "IBS "
    "2018061217982791000000" // 发起方流水,22位
    "20180612" // 发起方日期,8位
    "179827" // 发起方时间,6位
    "G50704"  //交易代码 6位
    "01"  //网关错误标识2
    "       "   // 网关错误代码 7
    " "   //编码1
    " "   //重发标志1
    "      "   //保留位1 6
    "50704"   //交易码5
    "20180612"   //交易发生日期8
    "12:12:12"   //交易发生时间8
    "17982790034           "   //交易流水号22
    "20161110"   //交易日8
    "0"   //代理标志1
    "0000"   //联网行编号4
    "8888      "   //交易网点10
    "          "   //柜员10
    "    "   //出纳员号4
    "          "   //授权柜员1  10
    "          "   //授权柜员2  10
    "3"   //交易渠道 1
    "0000      "   //终端号 10
    " "   //返回码类型 1
    "T"   //请求类型 1
    "00"   //授权级别 2
    "1       "   //当前第几页 8
    "10      "   //每页记录数 8
    "                    "   //备用1  20
    "                    "   //备用2  20
    "                    "   //备用3  20
    "                    "   //备用4  20
    "6225683528000346164             "   //银行账号 32
    "Au99.99   "   //合约代码  10
    "4011" //交易类型 4
    "00015000" //委托价格 8 2
    "1     " // 委托手数 6
    "1" // 指令类型 1

    二,是关于Sockets通信协议,有必要了解一下长链接,短链接的区别

    sockets报文如下

    #include "lrs.h"
    
    
        Action()
      {
          int rc = 888;
          int RecBufLen; // 接收报文长度
          char *RecBuf = NULL; // 接收报文内容
          RecBuf = (char*)calloc(10240, sizeof(char));
    
          lrs_set_connect_timeout(120, 0);
          lr_start_transaction("01_50704_委托报单"); // 完整事务
          lr_start_transaction("01_50704_委托报单_建立发送通道连接");
          rc = lrs_create_socket("MySocket","TCP","RemoteHost=21.96.22.56:14000",LrsLastArg); // 黄金系统ip:端口
          if(rc == 0)
          {
              lr_end_transaction("01_50704_委托报单_建立发送通道连接", LR_PASS);
          }
          else
          {
              lr_end_transaction("01_50704_委托报单_建立发送通道连接", LR_FAIL);
              lr_error_message("01_50704_委托报单_建立发送通道连接失败,错误码是:%d", rc);
              lr_end_transaction("01_50704_委托报单", LR_FAIL);
              lrs_free_buffer(RecBuf); // 释放空间
              lrs_disable_socket("MySocket", DISABLE_SEND_RECV); // 关闭接口
              lrs_close_socket("MySocket");
              lr_exit(LR_EXIT_ITERATION_AND_CONTINUE, LR_FAIL);
          }
          lrs_set_send_timeout(120, 0);
          lrs_set_recv_timeout(120, 0);
          lrs_set_recv_timeout2(120, 0);
    
          lr_start_transaction("01_50704_委托报单_发送报文");
          rc = lrs_send("MySocket", "SendBuf", LrsLastArg);
          if(rc == 0)
          {
              lr_end_transaction("01_50704_委托报单_发送报文", LR_PASS);
          }
          else
          {
              lr_end_transaction("01_50704_委托报单_发送报文", LR_FAIL);
              lr_error_message("01_50704_委托报单_发送报文失败;错误码是:%d;", rc);
              lr_end_transaction("01_50704_委托报单", LR_FAIL);
              lrs_free_buffer(RecBuf); // 释放空间
              lrs_disable_socket("MySocket", DISABLE_SEND_RECV); // 关闭接口
              lrs_close_socket("MySocket");
              lr_exit(LR_EXIT_ITERATION_AND_CONTINUE, LR_FAIL);
          }
          // 接受报文=====================================================================
          lr_start_transaction("01_50704_委托报单_接收报文");
    
          rc = lrs_receive("MySocket", "ReceiveBuf", LrsLastArg);
          if((rc == 0)||(rc == 9101))
          {
              lrs_get_last_received_buffer("MySocket", &RecBuf, &RecBufLen);
              if(RecBufLen>0)
              {
                  lrs_save_param_ex("MySocket", "user", RecBuf, 0, RecBufLen, "ascii", "NewRecBuf"); // 接收的完整报文
                  lrs_save_param_ex("MySocket", "user", RecBuf, 112, 1, "ascii", "RetStatus"); // 接收的交易状态
                  lrs_save_param_ex("MySocket", "user", RecBuf, 85, 7, "ascii", "RetCode");  // 接收的返回码
                  lrs_save_param_ex("MySocket", "user", RecBuf, 92, 100, "ascii", "RetMsg"); // 接收的返回信息
                  lrs_save_param_ex("MySocket", "user", RecBuf, 21, 22, "ascii", "RetID"); // 接收返回的流水号
                  //lr_error_message("======接收的完整报文是:%s", lr_eval_string("<NewRecBuf>"));
                  //lr_error_message("======发送的流水号是:%s", lr_eval_string("<DateTime><VuID><Num>"));
                  //lr_error_message("======接收的流水号是:%s", lr_eval_string("<RetID>"));
                  if (strcmp(lr_eval_string("<RetCode>"),"HJ0000 ") == 0)
                  //if (strcmp(lr_eval_string("<RetStatus>"),"N") == 0) // N-交易成功;E-交易失败;A-需要授权,交易未成功;W-警告(交易成功,返回提示信息);U-表示超时
                  {
                      if (strcmp(lr_eval_string("<RetID>"),lr_eval_string("<DATE><TIME><VUER><UNIQ>")) == 0) // 发送流水号和接收流水号相同,防止串包
                      {
                          lr_end_transaction("01_50704_委托报单_接收报文", LR_PASS);
                          lr_end_transaction("01_50704_委托报单", LR_PASS);
                      }
                      else
                      {
                          lr_end_transaction("01_50704_委托报单_接收报文", LR_FAIL);
                          lr_end_transaction("01_50704_委托报单", LR_FAIL);
                          lr_error_message("01_50704_委托报单接收报文串包了!!!发送流水号是:%s,接收流水号是:%s,接收的完整报文是:%s", lr_eval_string("<DateTime><VuID><Num>"),lr_eval_string("<RetID>"),lr_eval_string("<NewRecBuf>"));
                      }
                  }
                  else
                  {
                      lr_end_transaction("01_50704_委托报单_接收报文", LR_FAIL);
                      lr_end_transaction("01_50704_委托报单", LR_FAIL);
                      lr_error_message("01_50704_委托报单接收报文出错!交易状态是:%s,返回码是:%s,返回信息是:%s,接收的完整报文是:%s", lr_eval_string("<RetStatus>"),lr_eval_string("<RetCode>"),lr_eval_string("<RetMsg>"),lr_eval_string("<NewRecBuf>"));
                  }
              }
              else
              {
                  lr_end_transaction("01_50704_委托报单_接收报文", LR_FAIL);
                  lr_end_transaction("01_50704_委托报单", LR_FAIL);
                  lr_error_message("01_50704_委托报单接收报文为空!发送流水号是:%s", lr_eval_string("<DateTime><VuID><Num>"));
              }
          }
          else
          {
              lr_end_transaction("01_50704_委托报单_接收报文", LR_FAIL);
              lr_error_message("01_50704_委托报单_接收报文失败;错误码是:%d;", rc);
              lr_end_transaction("01_50704_委托报单", LR_FAIL);
          }
          lrs_free_buffer(RecBuf); // 释放空间
    
          lrs_disable_socket("MySocket", DISABLE_SEND_RECV);  // 关闭接口
          lrs_close_socket("MySocket");
    
          return 0;
      }
  • 相关阅读:
    接入微信公众平台开发之用户关注(取消)事件触发后台自定义消息体通知给用户的实现过程
    谈缓存数据库在web开发中的重要性
    在linux服务器下日志提取的python脚本(实现输入开始时间和结束时间打包该时间段内的文件)
    关于java多线程任务执行时共享资源加锁的方式思考
    关于近期开发中遇到的同一账户多人登录造成数据库数据不一致的思考和解决(避开了数据库存状态的常用处理手段)
    spingmvc实现在程序启动时调用数据库数据
    一个前端统计图,柱形图,饼状图,折线图的前端链接
    取得ascii的例子
    BCB 延时DelayTime
    C++ Builder中串口通讯的经验之谈
  • 原文地址:https://www.cnblogs.com/fy--/p/8891172.html
Copyright © 2011-2022 走看看