经过几天测试,发现有BUG,数据长度超过一定长度服务器就会收不到数据,主要原因还是没有理解到远程通讯中间几个0是干嘛用的,经过测试才发现,原来其中4为都是代表的数据长度,每一位最大值是255,所以重新分析发现,数据长度实际值是“数据长度+20+数据长度整数位数”,然后在把计算出来的数据长度保存到一个长度为4的字节集中,最后终于通过测试,发送超过1000字节的数据和1W以上的数据都测试没有问题,重新贴上新代码:
public static char[] addhead(char[] message){
int messagelength=message.length;
char [] head1 = ("EMSG0015").toCharArray();
char [] head2 = ("" +messagelength + "").toCharArray();
int datenum=messagelength;
datenum=datenum+20+String.valueOf(datenum).length()-1; //数据长度+头长度+数据长度位数;
char [] num={0,0,0,0};
//将长度数据保存到字节集中,共四位,每位最大值为255
for(int i=0;i<4;i++){
if(datenum>=256){
num[i]=(char)(datenum%256);
datenum=datenum/256;
}else{
num[i]=(char)datenum;
break;
}
}
char [] date=null;//new char[head1.length+head2.length+message.length+num.length*2+10];
//d = 到字节集 (a) + c + { 0, 0, 0, 0 } + c + 到字节集 (b) + 到字节集 (数据)
date=addchar(head1,num);
char [] buf={0,0,0,0};
date=addchar(date,buf);
date=addchar(date,num);
date=addchar(date,head2);
date=addchar(date,message);
System.out.println(date.length);
System.out.println(date);
return date;
}
详见附件,顺便把易语言的测试代码也附上去(这代码就是原分析远程服务帖的代码改的)
PS:文件传输我没测试过,中文传输我才用的base64编码后再传输,直接传中文会掉数据,不知道什么原因,也不想分析了,因为我的目的达到了,如果官方能功能远程服务是怎么封装的就不会有这么多事了