java socket 远程调用_JAVA socket与易语言远程服务通信添加头

经过几天测试,发现有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编码后再传输,直接传中文会掉数据,不知道什么原因,也不想分析了,因为我的目的达到了,如果官方能功能远程服务是怎么封装的就不会有这么多事了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
易语言Javalib_static.lib支持库中文名为易语言Java支持库,本易语言支持库使易语言具备了访问Java类库的能力。“Java虚拟机”和“Java本地接口”是本支持库中最重要的两个数据类型。由“Java虚拟机”负责真实Java虚拟机的生命周期管理,而“Java本地接口”则提供Java类库的访问接口。使用时,可直接通过“Java本地接口”的各类方法访问Java类库(即与“Java虚拟机”通信),由支持库本身自动完成“Java虚拟机”的创建和销毁。如果需要特别指定“用户类路径”或“本地库路径”,则必需在使用“Java本地接口”之前显式调用“Java虚拟机.创建()”方法创建Java虚拟机,以传入相关路径参数。 本支持库要求目标机器中已安装“Java运行时环境”(JRE)。如果在没有配置好Java环境的情况下使用本支持库,所有对象方法都将返回空值(假,0,“”)。 本支持库安装后,将自动在易语言主菜单中添加一项工具菜单,[工具]-[JavaLib:Java类型签名查询]。这是一个查询“Java 类型签名(Type Signature)”的实用工具。 易语言Javalib_static.lib支持库为易语言静态支持库,需要易语言系统5.0版本的支持,需要易语言系统核心支持库5.0版本的支持,提供了3种库定义数据类型,提供了66种命令,提供了1个库定义常量。 操作系统需求: Windows 易语言官方论坛

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值