开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 5535|回复: 13
收起左侧

[易源码分享] JAVA socket与易语言远程服务通信添加头

[复制链接]
发表于 2019-7-11 09:44:28 | 显示全部楼层 |阅读模式   四川省遂宁市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
自己在网上找了很久都没有相关的信息,无耐要实现android与易语言写的远程服务器通信,差点就放弃了,准备用webserver了,但这样服务器要重写,太要命了!
最终终于找到一个分析易语言远程协yi的帖子(非常感谢该帖提供的思路),但只有易语言版本的帖子地址找不到了大家可以在论坛找找
根据他的思路和分析写出的java类,只需调用JAVA类将需要发送的数据添加一个头就可以了,测试很多次完全没问题哦,但没有测试大数据包,各位可以试试J
AVA调用方式:char [] Datebuf=ehead.addhead(mesg.toCharArray());(这里很简单我就不贴出全部全代码了
**************下面是添加数据头JAVA类的源码(已上传附件,新手作品大神勿喷)***********************
package net.testSocket;

public class ehead {


    //添加易语言支持的远程服务器包头
    public static char[] addhead(char[] message){

        int messagelength=message.length;

        char [] head1 = ("EMSG0015").toCharArray();   //这里的15是发送次数,不能为1,猜测1应该是用于连接,数字随意(暂为发现问题),但位数一定要保证
        char [] head2 = ("<Msg0015>" +messagelength + "</Msg0015>").toCharArray();

        int datenum=messagelength;

        if(10 <= messagelength && messagelength <= 99){
            datenum=datenum+1;
        }
        if(99 < messagelength && messagelength <= 233){
            datenum=datenum+2;
        }

        datenum=datenum+20;
        char [] num={(char)(datenum)};

        char [] date=null;//new char[head1.length+head2.length+message.length+num.length*2+10];

        date=addchar(head1,num);
        char [] buf={0,0,0,0,0,0,0};
        date=addchar(date,buf);
        date=addchar(date,num);
        char [] buf1={0,0,0};
        date=addchar(date,buf1);
        date=addchar(date,head2);
        date=addchar(date,message);

        System.out.println(date.length);
        System.out.println(date);

        return date;
    }

    public static char[] addchar(char[] a,char[] b)
    {
        char[] c=new char[a.length+b.length];

        for(int i=0;i<a.length;i++){

            c=a;
        }

        for(int j=0;j<b.length;j++){
            c[a.length+j]=b[j];
        }

        return c;
    }

}


ehead.7z

653 Bytes, 下载次数: 64, 下载积分: 精币 -2 枚


结帖率:100% (1/1)
发表于 2023-8-18 23:01:36 | 显示全部楼层   湖南省株洲市
正好需要 找了半天
回复 支持 反对

使用道具 举报

发表于 2022-2-26 09:39:28 | 显示全部楼层   浙江省丽水市
好痛苦,没有币下载东西也麻烦
回复 支持 反对

使用道具 举报

发表于 2022-2-26 09:38:54 | 显示全部楼层   浙江省丽水市
这个头疼外部的东西发不到易语言远程服务。看看你这个有没有启发。
回复 支持 反对

使用道具 举报

发表于 2021-10-10 12:00:19 | 显示全部楼层   浙江省宁波市
请问,易安卓能连接易语言的远程服务器吗
回复 支持 反对

使用道具 举报

发表于 2021-10-10 11:59:51 | 显示全部楼层   浙江省宁波市
好贴。刚好需要
回复 支持 反对

使用道具 举报

发表于 2020-2-13 13:55:30 | 显示全部楼层   山东省聊城市
感谢楼主分享,整好需要
回复 支持 反对

使用道具 举报

发表于 2020-1-11 17:26:11 | 显示全部楼层   北京市北京市
我想问一下我如果是用socket  从易语言发送信息给java端  java端怎样才能收到 信息  
回复 支持 反对

使用道具 举报

发表于 2019-11-9 12:23:24 | 显示全部楼层   广西壮族自治区玉林市
感谢分享、困扰了几天的问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-15 14:40:29 | 显示全部楼层   四川省遂宁市
经过几天测试,发现有BUG,数据长度超过一定长度服务器就会收不到数据,主要原因还是没有理解到远程通讯中间几个0是干嘛用的,经过测试才发现,原来其中4为都是代表的数据长度,每一位最大值是255,所以重新分析发现,数据长度实际值是“数据长度+20+数据长度整数位数”,然后在把计算出来的数据长度保存到一个长度为4的字节集中,最后终于通过测试,发送超过1000字节的数据和1W以上的数据都测试没有问题,重新贴上新代码:
  public static char[] addhead(char[] message){

        int messagelength=message.length;

        char [] head1 = ("EMSG0015").toCharArray();
        char [] head2 = ("<Msg0015>" +messagelength + "</Msg0015>").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编码后再传输,直接传中文会掉数据,不知道什么原因,也不想分析了,因为我的目的达到了,如果官方能功能远程服务是怎么封装的就不会有这么多事了

ehead1.7z

191.18 KB, 下载次数: 55, 下载积分: 精币 -2 枚

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表