socket协议分为TCP、UDP两种(区别与联系在此不做赘述),一种为长连接、一种为短连接。如果创建连接时在init中对应关闭连接在end中,则为长连接;如果创建关闭连接都是在action则为短连接。
在这里主要是对socket脚本调试过程中遇到的问题做一下简单记录。
Q1:发送请求内容的组装方式?
常用的有两种,数据一种是data.ws文件中存放的,一种是直接通过函数存在参数中。
第一种,data.ws中直接把请求放进去就可以了,请求内容的具体形式如(二进制、加密数据)等根据实际编写就可以。
Action() { int intConn; //连接成功标志 int Count_ConnFail=0; //连接失败统计 int Count_NoRecv=0; //返回报文为空统计 int Count_Error=0; //交易失败统计 //创建连接 intConn=lrs_create_socket("socket1", "TCP", "LocalHost=0", "RemoteHost=10.10.49.1:1000", LrsLastArg); lr_start_transaction ("汇总查询"); if(intConn==0) // Socket连接创建成功 { lrs_set_send_timeout (120,0); // 设置发送报文的超时时间 lrs_send("socket1", "buf1", LrsLastArg); lrs_set_recv_timeout (120,0); // 设置返回报文的超时时间 lrs_receive("socket1", "buf2", LrsLastArg); //lrs_get_last_received_buffer ("socket1",&ActualBuffer,&NumofBytes); if(lrs_get_last_received_buffer_size ("socket1")<1) // 如果系统返回报文为空 { Count_NoRecv++; lr_end_transaction("汇总查询",LR_FAIL); lr_output_message ("返回报文为空。为空次数:%d",Count_NoRecv); } else { // 系统返回报文不为空 //取ansCode:0为成功 非0为失败 lrs_save_searched_string ("socket1",LRS_LAST_RECEIVED,"ansCode","LB=<ans_code>","RB=</ans_code>",1,0,-1); lr_output_message ("ansCode:%s",lr_eval_string ("<ansCode>")); //取ansInfo信息:“交易成功”即成功,其他返回值均为失败 lrs_save_searched_string ("socket1",LRS_LAST_RECEIVED,"ansInfo","LB=<ans_info>","RB=</ans_info>",1,0,-1); //lr_output_message ("AnsInfo: %s",lr_eval_string("<ansInfo>")); if(strcmp(lr_eval_string("<ansCode>"),"0")==0) { lr_end_transaction ("汇总查询",LR_PASS); lr_output_message ("交易结果:%s",lr_eval_string ("<ansInfo>")); } else { //交易失败 Count_Error++; lr_end_transaction ("汇总查询",LR_FAIL); //交易失败 lr_output_message("交易结果:%s",lr_eval_string ("<ansInfo>")); lr_output_message ("交易失败次数统计:%d",Count_Error); } } } else // Socket连接创建不成功 { Count_ConnFail++; lr_end_transaction ("汇总查询",LR_FAIL); lr_output_message ("Socket 连接失败! Error code=%d。连接失败次数:%d",intConn,Count_ConnFail); } lrs_close_socket("socket1"); return 0; }