在很多系統之間交互時,都是直接使用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文件不要//“”註釋,這種方式註釋內容會在保存到報文中