lijian422202 发表于 2007-8-22 18:12:07

LR在socket协议处理特殊字符的问题

求助大虾,,,实在搞不定了!


现测试一个socket通讯的业务,碰到一个问题,具体如下:

系统是一个售票系统,通讯的业务包是一个锁票和卖票的过程,脚本说明吧。。。。。

action部分
#include "lrs.h"

Action()
{

unsigned char databuf[] = {0x30,0x00,0x00,0x00,0x31,0x30,0x31,0x30,0x31,0x31,0x33,0x30,0x31,0x30,0x31,0x0d,0x31,0x2c,0x32,0x2c,0x33,0x2c,0x34,0x2c,0x35,0x0d,0x32,0x30,0x30,0x37,0x2d,0x30,0x38,0x2d,0x32,0x32,0x09,0x33,0x38,0x33,0x09,0x31,0x09,0x35,0x09,0x31,0x0a};
unsigned short i;
unsigned char high,low;
char buff;
/*------------调用CRC算法-----------*/
lr_load_dll("FrontCRC.dll");
i=CRC16( databuf, sizeof( databuf));

lr_output_message("==========%x",i);
/*------------计算2个字节的值,并转换成char-----------*/
high = (i >> 8) & (unsigned short)0x00FF;
low = (i & (unsigned short)0x00FF);
sprintf(buff, "%c%c", high,low);


lr_save_string(buff, "CRC");
lr_output_message("===============%s",lr_eval_string("<CRC>"));

lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=LINUXSERVER2:2908",LrsLastArg);

lrs_send("socket0", "buf0", LrsLastArg);

lrs_receive("socket0", "buf1", LrsLastArg);
    return 0;
}

data.ws部分---------由于没有通过第一步,所有没有把后面的BUF加上
;WSRData 2 1

sendbuf0 49
      "0"
      "\x00\x00\x00"
      "10101130101\r1,2,3,4,5\r2007-08-22\t383\t1\t5\t1\n"
      "<CRC>"

recvbuf1 41
      "380&"
      "\x9a"
      "1"
      "\x00\x00\x00"
      "$010113020310708021\r31070802,1鐝"


-1


问题:unsigned char databuf[]定义的数据为售票一些信息,比如哪一场电影,哪一个座位等等,为了跑起这个脚本,需要做参数化的,但一旦参数化后,系统有个算法来算出CRC码,加在发送信息的后2个字节,脚本中已经完成。
问题出来了,由于CRC码是以16进制表示,如果转换成正常字符LR可以识别,但如果转换成特殊的就不能识别了,导致在data.ws里面的参数会出问题,请求解决。。。。
这里给大家一个LOG看看情况:
脚本中红色位置的输出
Action.c(14): ==========7276
Action.c(22): ===============rv   如果是这样脚本就可以通过

把数组里面的数据改动下,经过算法后
Action.c(14): ==========74d7
Action.c(22): ===============t?这里的?号 在LR里面实际显示是一个方的黑点。
这样脚本在SENT的时候就报错了。。真不知道怎么解决了,

请大家有时间帮帮忙。

[ 本帖最后由 lijian422202 于 2007-8-22 18:17 编辑 ]

lijian422202 发表于 2007-8-22 18:15:22

发个字符的对照表:
十进制    字符
65         A
这样的就话脚本就不会出问题;
十进制    字符
58         :
这样有特殊字符的,就玩完了。。。。   

另外在录制发送的时候,录制到了特殊字符,是可以执行的,但由于售票系统的限制,一个场次一个座位只能卖一次,所以录制出来的不能用。。。而且脚本返回的最后2个字节显示也是特殊字符,但返回不影响脚本,呵呵,所以想解决发送的问题。

lijian422202 发表于 2007-8-23 09:38:56

有没有高手帮忙解答...

lijian422202 发表于 2007-8-24 10:45:31

哎 有点难度的问题,,就这样没有人过问,,

lijian422202 发表于 2007-8-24 14:57:02

搞定这个问题了。。。。其实很简单。。

tesge 发表于 2007-8-24 17:58:39

请问怎么解决的,谢谢

nataliedu 发表于 2007-11-2 16:08:12

怎么解决的啊,楼上的共享一下,急~~~~~

nataliedu 发表于 2007-11-2 16:40:31

我找到的解决方案~~~~~共享一下

LoadRunner VuGen WinSocket Patch
使用VuGen开发Win Socket脚本的时候,当Send Buffer中含有类似于"\"之类的特殊字符时,VuGen会报一个Can't transmit ... to send buffer之类的错误。

据HP(Mercury)官方解释,这是由于中国地区编码格式与美国英文编码格式不兼容造成。
建议将区域由中国更改为美国即可解决这个问题。

但是这个方法颇麻烦,于是我们有个高手修改了LR的wsrun32.dll文件,解决了这个问题。
经过我多次测试,未发现问题,但是由于不是官方提供的补丁,请大家慎用。

使用方法:

1.关闭所有打开的VuGen

2.备份LR\bin目录下的wsrun32.dll文件,将附件中的wsrun32.dll文件拷贝至LR\bin目录下

3.开始->运行,输入VuGen.ini,回车,修改VuGen.ini文件。在VuGen.ini文件中添加如下内容:

LegacyLrsSend=1

4.保存并关闭VuGen.ini

5.现在重新使用VuGen打开并执行脚本

dier1011 发表于 2012-10-25 11:49:40

回复 8# nataliedu


   附件在哪里,如果可以麻烦发送我邮箱一下,dier1011@163.com,O(∩_∩)O谢谢!

sophia_923 发表于 2012-11-12 16:44:12

附件共享,谢谢!我的邮箱:sophia_923@hotmail.com

51lyfcslt 发表于 2012-11-30 10:26:22

我也急需这个DLL附件文件,麻烦也发给我一份:951918768@qq.com    非常感谢
页: [1]
查看完整版本: LR在socket协议处理特殊字符的问题