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

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

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

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

sockets报文如下

#include "lrs.h"

    Action()
{
int rc = ;
int RecBufLen; // 接收报文长度
char *RecBuf = NULL; // 接收报文内容
RecBuf = (char*)calloc(, sizeof(char)); lrs_set_connect_timeout(, );
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 == )
{
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(, );
lrs_set_recv_timeout(, );
lrs_set_recv_timeout2(, ); lr_start_transaction("01_50704_委托报单_发送报文");
rc = lrs_send("MySocket", "SendBuf", LrsLastArg);
if(rc == )
{
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 == )||(rc == ))
{
lrs_get_last_received_buffer("MySocket", &RecBuf, &RecBufLen);
if(RecBufLen>)
{
lrs_save_param_ex("MySocket", "user", RecBuf, , RecBufLen, "ascii", "NewRecBuf"); // 接收的完整报文
lrs_save_param_ex("MySocket", "user", RecBuf, , , "ascii", "RetStatus"); // 接收的交易状态
lrs_save_param_ex("MySocket", "user", RecBuf, , , "ascii", "RetCode"); // 接收的返回码
lrs_save_param_ex("MySocket", "user", RecBuf, , , "ascii", "RetMsg"); // 接收的返回信息
lrs_save_param_ex("MySocket", "user", RecBuf, , , "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 ") == )
//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>")) == ) // 发送流水号和接收流水号相同,防止串包
{
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 ;
}

最新文章

  1. ODBC database driver for Go:Go语言通过ODBC 访问SQL server
  2. jQuery动态设置样式List item
  3. orcale 匿名代码块
  4. ubuntu下 GCC编译程序出现 undefined reference to `std::ios_base::Init::Init()&#39;问题
  5. Qt事件和信号的区别 .
  6. Django - staticfiles,STATIC_ROOT, STATIC_URL,STATICFILES_DIRS
  7. 为iPhone6设计自适应布局(二)
  8. Swift - 使用相机拍摄照片
  9. 分页工具类 BaseAction
  10. 安装两个JDK后配置环境变量没用?
  11. tomcat7性能调优与配置(以windows版为例)
  12. python画出心形图
  13. OO第一单元总结——多项式求导
  14. tarjin求割点
  15. Python中面向对象的概念(科普)
  16. Laravel 5.2数据库--多个关联关系,带条件约束的渴求式加载的问题
  17. 体验go语言的风骚式编程
  18. ionic3使用第三方图标
  19. Window对象属性
  20. File file = new File(&quot;路径名&quot;) 路径名的2种写法

热门文章

  1. linux / centos 安装SQL Server 2017 设置默认语言与排序规则Chinese_PRC_CI_AS
  2. 我们常说的CDN到底是什么?
  3. shllter自动和手动实例
  4. 说说eclipse调优,缩短启动时间
  5. oracle树形语句
  6. Delphi 文件拷贝
  7. github的使用经历
  8. Javascript的事件模型和Promise实现
  9. 转载WPF:创建你的第一个WPF项目
  10. PDF文档转换为图片、图片转成PDF 及PDF合并