|
求助大虾,,,实在搞不定了!
现测试一个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[10];
/*------------调用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
send buf0 49
"0"
"\x00\x00\x00"
"10101130101\r1,2,3,4,5\r2007-08-22\t383\t1\t5\t1\n"
"<CRC>"
recv buf1 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 编辑 ] |
|