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;
}
View Code

相关文章: