在很多系统之间交互时,都是直接使用socket接口,分享下lR对socket脚本开发
Socket是一套建立在TCP/IP协议上的接口不是一个协议,只要底层实现TCP IP协议,都可以用socket进行通信。
init文件:
#include "lrs.h"
vuser_init()
{
lrs_startup(257); // 初始化 WinSock DLL
return 0;
}
action文件
#include "lrs.h"
Action()
{
int rc;//保存创建socket,返回值
char *ActualBuffer; //保存返回报文
int NumberOfBytes; //保存返回报文长度
int rend_status,resp_start=0;//保存发送和接收,返回值
//创建返回socket
rc=lrs_create_socket("socket0", "TCP", "RemoteHost=96.0.49.180:12016",LrsLastArg);
//判断是否创建socket成功
if(rc!=0){
lr_output_message("Create socket 96.0.45.67:12015 Error, Error Code:%d", rc);
lr_fail_trans_with_error("Not Create Socket!!!\n");
goto END_TRANSACTION;
}
//保存开始事务
lr_start_transaction("test");
//发送报文,报文保存buf0中,buf0在data.ws中定义
rc=lrs_send("socket0", "buf0", LrsLastArg);
lrs_set_recv_timeout(80, 0); //设置接收超时
lrs_set_recv_timeout2(10,0);//接收数据包长度比对超时
//接收报文,保存到buf1,buf1是data.ws文件中定义
rc=lrs_receive("socket0", "buf1", LrsLastArg);
if(rc!=0 && rc!=LRS_RECV_MISMATCH) {
lr_fail_trans_with_error("Not Receive Response_Packet!!!\n");
goto END_TRANSACTION;
}
//socket0返回报文,搜索匹配值
lrs_save_searched_string("socket0",LRS_LAST_RECEIVED,"result","LB=<ret_code>","RB=</ret_code>\n",1,0,-1);
lrs_save_searched_string("socket0",LRS_LAST_RECEIVED,"error_msg","LB=<ret_explain>","RB=</ret_explain>\n",1,0,-1);
//判断返回报文内容,
if (strcmp(lr_eval_string("<result>"),"00000")!=0) {
//设置事务fail
lr_fail_trans_with_error("Response_Packet retcode:%s ",lr_eval_string("<error_msg>"));
}
END_TRANSACTION: //设置goto点
lr_end_transaction("test", LR_AUTO);//记录结束事务
lrs_free_buffer(ActualBuffer);//释放内存
lrs_close_socket("socket0");// 关闭socket
return 0;
}
end文件中
#include "lrs.h"
vuser_end()
{
lrs_cleanup(); //
return 0;
}
data.ws文件:
;WSRData 2 1
send buf0 * //发送报文
"0000096799PAY1661009 <?xml version=\"1.0\" encoding=\"GB2312\"?><ebank>"
recv buf1 1 //接收报文
"1"
-1
注意:
1、本脚本为短链接脚本,固创建socket中保存中action中,如果是长链接,则将创建socket部分代码移到init中,将关闭socket部分代码移到end中。
2、data.ws文件不要//“”注释,这种方式注释内容会在保存到报文中