|
action代码如下
#include "lrs.h"
Action()
{
int i, j = 0; //循环计数
char socket[10]; //变量socket
char str[1]; //保存转换成char型的i值
char Cstr[6];
char CCstr[6];
char CCCstr[6];
char SerialNo[40];
char *UserBuffer, *UserBufferHex;
//文件保存路径
char *filename = "d:\\serialno.txt";
int pSerialNo, read = 0;
//是否需要设置集合点
//lr_rendezvous("集合点");
//循环生成socket通信
for (i = 0; i < 10; i++) {
//*******************生成变量**********************//
//变量初始
strcpy(socket, "socket");
//合并生成程序需要的值
//itoa(int, string, 进制基数)数值型转换成字符型,并保存到变量中
//strcat字符串合并
strcat(socket, itoa(i, str, 10));
//*****************
//从txt中读取流水号,处理后,再保存
/*打开文本*/
read = (int)fopen(filename, "r");
while (feof(read) == 0) {
fscanf(read, "%d", &pSerialNo);
}
fclose(read);
//数字转换成字符
itoa(pSerialNo, Cstr, 10);
pSerialNo = pSerialNo + 1;
itoa(pSerialNo, CCCstr, 10);
lr_output_message("流水号:%s", CCCstr);
/*写入文本*/
read = (int)fopen(filename, "w");
fprintf(read, "%s", CCCstr);
fclose(read);
//*****************
//必须初始serialno,否则无法合并字符串
strcpy(SerialNo, "");
//前置0
for (j = 0; j < 6 - strlen(Cstr); j++) {
strcat(SerialNo, "0");
}
//合成流水号
strcat(SerialNo, itoa(pSerialNo, CCstr, 10));
/*
//将数值部分16进制,并返回
for (j = 0; j < strlen(Cstr); j++) {
strncpy(CCstr, Cstr + j, 1);
UserBufferHex = lrs_decimal_to_hex_string(socket, CCstr, 1);
strcat(SerialNo, UserBufferHex);
}
*/
//将流水号传给参数化,即data.ws里
lrs_save_param_ex(socket, "user", SerialNo, 0, strlen(SerialNo), NULL, "SerialNo");
//*******************程序执行**********************//
//开始登录事务
lr_start_transaction("模拟消费");
//建立连接
//lrs_create_socket(socket, "TCP", "RemoteHost=<IP>", LrsLastArg);
//发送登录请求数据包
lrs_send(socket, "buf3", LrsLastArg);
//接收服务器返回的数据包
lrs_receive(socket, "buf1", LrsLastArg);
//从返回报文中截取某长度的数据保存到参数中
lrs_save_param_ex(socket, "received", "buf1", 224, 2, "ascii",
"param0");
lr_output_message("返回码: %s", lr_eval_string
("<param0>"));
//strcmp字符串比较
if (strcmp(lr_eval_string("<param0>"), "00") == 0) {
lr_output_message("消费成功!");
lr_end_transaction("模拟消费", LR_PASS);
}
else {
lr_output_message("消费失败!");
lr_end_transaction("模拟消费", LR_FAIL);
}
//关闭连接
//lrs_close_socket(socket);
}
/*
lrs_get_last_received_buffer("socket0", &recvbuf, &recvlen);
//检测返回字节数是否符合预期长度
if(recvlen == 415)
lr_end_transaction("模拟登录", LR_PASS);
else
lr_end_transaction("模拟登录", LR_FAIL);
*/
return 0;
}
vuser.ini和vuser.end里分别是建立SOCKET连接和关闭连接的代码,就不贴了
data.ws里的报文内容应该不会有错,所以不贴了
目的是实现同时有10个连接并发操作
上面代码在Vuser里运行正常,没有报错
但放到CONTROLLER里执行无法执行
controller里设置的是每10秒增加一个VUSER,一共增加10个
运行的时候,VUSER都显示RUNNING状态
SERVER端查看,只有SOCKET连接,数据没有接收到
求教是什么问题 |
|