|
部分脚本如下:
lrs_send("socket0", "buf8", LrsLastArg);
lrs_receive("socket0", "buf9", LrsLastArg);
bufPort=lrs_get_received_buffer("socket0",20,2,NULL);//获取缓冲区端口号
lrs_hex_string_to_int(bufPort,2,&i); //转换端口号为整数
itoa(i,testasc,10); //转换端口号为字符串
outPortno=sortPort(testasc);
lr_save_int(outPortno,"PortNo");//保存端口号为参数
lrs_create_socket("socket1", "TCP", "LocalHost=0", "RemoteHost=Gate:<PortNo>", LrsLastArg);
主要是实现:
从服务端获取端口号,参数化端口号后进行连接
返回端口号buf
recv buf9 24
"\x02\xdb\x00\x00\x10\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00"
"\x00\x17"
"'"
"\x00\x00"
端口号为\x17"'"两位,通过以下函数获取端口号并转换至临时变量i
bufPort=lrs_get_received_buffer("socket0",20,2,NULL);//获取缓冲区端口号
lrs_hex_string_to_int(bufPort,2,&i); //转换端口号为整数
转换i为字符串itoa(i,testasc,10); //转换端口号为字符串
由于获取的端口号为16位进制的并且从高位到低位排序的顾使用以下方法进行转换
调用方法outPortno=sortPort(testasc);
sortport()方法如下:
int sortPort(char *strPortno_in[5])
{
char str1[4]="";
char strPortno_out[4]="";
char tmp1[2]="",tmp2[2]="";
int intPortno_out=0;
itoa(atoi(strPortno_in),str1,16);
strncpy(tmp2,str1+2,2);
tmp2[2]='\0';
strcat(strPortno_out,tmp2);
strncpy(tmp1,str1,2);
tmp1[2]='\0';
strcat(strPortno_out,tmp1);
strPortno_out[4]='\0';
intPortno_out=zh(strPortno_out);
return intPortno_out;
}
//16进制转化为10进制
int zh(char s[])
{
int i,m,temp=0,n;
m=strlen(s);//十六进制是按字符串传进来的,所以要获得他的长度
for(i=0;i<m;i++)
{
if(s>='A'&&s<='F')//十六进制还要判断他是不是在A-F或者a-f之间a=10。。
n=s-'A'+10;
else if(s>='a'&&s<='f')
n=s-'a'+10;
else n=s-'0';
temp=temp*16+n;
}
return temp;
}
问题:
运行都没问题,但是在运行场景至一段时间后系统会报以下错误
lrs_hex_string_to_int无法转换缓冲区数据,错误代码9013
在网上找了下有人说可能是ip限制的问题,故使用了ip欺诈从新运行场景
但问题依然存在。
求:
求高人给予解答啊!小弟谢过先了!在线等 |
|