lgys66 发表于 2009-10-8 15:09:37

测winsocket如何参数化 谢谢

模拟终端机登录服务器,每个终端机都有一个编号,要对这个编号和buffer参数化
脚本如下:
/*********************************************************************
* Created by Mercury Interactive Windows Sockets Recorder
*
* Created on: Tue Oct 06 10:17:21
*********************************************************************/
#include "lrs.h"


vuser_init()
{
    lrs_startup(257);

    return 0;
}

#include "lrs.h"


Action()
{


void mod_buffer(char* data, int psize)

    {
          unsigned char* ptr;
          lrs_get_buffer_by_name("buf0", &data, &psize);
      lrs_save_param_ex("socket0","static",data,0,psize,"null","ptr");
          data = checksum(ptr, 19);               
   
    }

      unsigned char checksum(unsigned char* data, int size)

   {
         int i;
         unsigned char val = 0;
      
         for(i = 0; i < size; i++)
                  val += data;
      
         return val;
   }

    lrs_create_socket("socket0", "UDP", "LocalHost=0",LrsLastArg);

    lrs_send("socket0", "buf0", "TargetSocket=192.168.1.11:8000", LrsLastArg);

    lrs_receive("socket0", "buf1", LrsLastArg);

    lrs_close_socket("socket0");

    return 0;
}
#include "lrs.h"


vuser_end()
{
    lrs_cleanup();

    return 0;
}

data.ws

;WSRData 2 1

sendbuf0 20
      "\x00"
      "~"
      "\x00\x00\x00\x00\x84"
      "0512010010"            //终端机编号
      "\x00\x00\xec"            

recvbuf1 20
      "\x00"
      "~"
      "\x00\x00\x00\x00\x85"
      "0512010010"             //终端机编号
      "\x00\x00\xed"            

-1

参数化后 这个代码是有问题的,哪位大侠能帮我改改,
0512010010是终端机编号,所有主机的编号是一样长的, 服务器要验证buf中的第二十位,通过才能让终端机登录,
buf由前19位累加而成,---"\x00"
      "~"
      "\x00\x00\x00\x00\x85"
      "0512010010"
      "\x00\x00\
我用这个函数unsigned char checksum(unsigned char* data, int size)来得到第二十位,是不是有问题?? 如何对这些做参数化
   还请哪位大侠多多指点

shwonder 发表于 2009-10-8 18:13:37

哥们,既然说问题,不妨把问题症状给出来看看。

另外,你的send 和 recv 中都有16进制码,这些大概有关联?!

lgys66 发表于 2009-10-9 09:45:57

问题就是把终端编号参数化后 不能登陆服务器,服务器要验证BUF中的第二十位,第二十位由前十九位累加起来的

xiaoan_2131 发表于 2009-10-9 10:37:59

我觉得这个适用比对方法,CSDN找找,应该有合适比对方法:lol

lgys66 发表于 2009-10-9 12:07:16

比对方法不适合吧,checksum函数是算出第二十个字节,这里还是先要读取buffer然后在做累加算出checksum,才能 通过服务器的验证,
有知道的加我QQ 12719335

SANGZHEYING 发表于 2009-10-9 14:43:53

我写过类似的脚本,校验位是取发送内容一段字节的异或和~
建议楼主取得终端机编号,然后把发送数据写成一个数组,对整个数组做参数化~ 要验证的第二十位自定义函数做累加,然后用memcpy调用~ 验证的第二十位自定义函数方法最好依照服务器的写法,最方便的方法就是从开发人员那边把代码拷贝过来~~

lijian422202 发表于 2009-10-9 18:37:39

大概把你的问题看了一遍,由于在LR里面有16进制表示,也有符号表示,不知道你说是怎么加。。比如你data.wa中就有一个“~”符号,是怎么加法,还是都转成ASCII码来加。或者用16进制来加。。我用你的前19位加。怎么个算法都要进位了。也就是一个字符不能表示了。
页: [1]
查看完整版本: 测winsocket如何参数化 谢谢