zoukankan      html  css  js  c++  java
  • MINA实战

    1. cmd的len就是真实的len,而不需要/2了;
    2. timer的定时任务,start并不执行,只有在第一个interval时间过后才会第一次执行;
    3. paddLeft的使用:"Jim",使用padLeft(5,'0')之后,就是00Jim;
      1. bit(位)是传输单位,二进制的0、1;Byte(字节)是最小的数据存储单位;1Byte = 8Bit;一个英文字母、数字、半角标点都是1Byte(字节);在传递命令中,路径就是
        1)Encoding.UTF8.GetBytes(cuseeion),将文字转换为字节;
        2)就每一个字节转换为16进制
        StringBuilder sb = new StringBuilder(data.Length * 3);

    foreach (byte b in data)

        sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));

    return sb.ToString().ToUpper();

    3)将

    1. 使用ByteArrayToHexString(bb.ToByteArray())的方法,可以获得最终传输到命令服务器的内容(00002715XXX);对于协议中描述的"FFFF0A000000000001014D025B"而言,其实已经是经过16进制编码的,所以对于把这部分压入到ByteBuffer,直接用HexStringToByteArray(" FFFF0A000000000001014D025B")即可;
    2. 将字符串转换为byte[]其实是对字符串的char进行ASCII编码(基于10进制编码),在ByteArrayToHexString中因为采用了16进制进行编码,这就有问题:两位的十进制字节可能一位16进制字节即可,于是采用PadLeft进行补位处理,这也是我们看到的在协议中定义的比如MAC地址32位(字节,或者说字母数字),但是其实是64位长,就是在转成byte[]转16进制的时候,固定做两位长度。
    3. Socket对象中的SendTimeout和ReceiveTimeout默认值是0,代表无线等待;有的时候我们可以通过设定超时时间来判定操作的成功与否
    4. substring,endIndex是不包含在截取范围里面的;
    5. byte数组长度是16进制字符长度的两倍;所以如果协议长度为长度为4,指的是数组长度;那么在截取协议长度应该是8;
    6. 使用logback,不再需要log里面使用System.out.println(...);
    7. logback之所以需要传递class,其实是为了输出class名称;因为在配置appender的encoder的时候,可以通过指定%c(注意小写c)来指定输出log名称,如果你传入的是this.getClass()为参数,那么输出的内容就是class的类名称(其实内部处理是getClassName()然后当做这个log的名称);如果一个log的名称没有配置到logback.xml中,那么将继承root的输出级别;
    8. logback的Appender中的filter也有一个级别;这个级别如果是level级别(ch.qos.logback.classic.filter.LevelFilter),那么要求必须一致才会让这个appender进行输出(可以通过onMatch以及OnMisMatch配置来实现);如果是ch.qos.logback.classic.filter.ThresholdFilter,就是和传统意义的级别一样,只有平行和高于这个级别的日志请求才会被输出;
    9. 使用logback其实只要把logback.xml放入到resource文件夹下即可(resource文件件是手工创建的"Source Foler";
    10. 不要再尝试计算多少位,然后取出数组位数,在进行16进制转换;你需要做的就像下面,MINA的IOBuffer已经替你做了位移和16进制转换之类的事情了:
    11. 如果想要让业务出现的异常达到控制台上面,需要通过

      e.printStackTrace()方式来让异常信息输出到控制台上面;采用"throws Exception"方式如果不是在外层进行捕获,仍然无法输出到控制台;比较好的方式是在底层采用throws Exception,在外面某一层通过try…catch的方式进行捕获,统一输出;
    12. 开始客户端可以和服务器通信,但是服务器和客户端传输数据总是失败;后来发现之前是直接session.write(XXX),参数内容是字符串;如果是直接字符串,客户单以及服务器必须要相应的解码/编码过滤器;如果没有,则必须要通过传递IoBuffer的方式让write来进行写,如下图所示:

      客户端终于接收到了服务器端的数据;
    13. 在使用iBatis的时候:发生如下错误:Type interface intelliFarming.cmdSvr.service.dao.IDeviceDao is not known to the MapperRegistry.后来确认错误是因为dataSource的xml文件。
    14. 在windows2008上面安装完毕了mysql之后,远程无法访问;本地连接没有问题;1.登录用户的Host字段改为"%";2.安装完毕了Mysql之后,尽管它把3306端口打开,但是在防火墙里面看到新添加了两个入栈规则分别是"专有"以及"域";需要把他们其中任意一个增加勾选"公用"即可
  • 相关阅读:
    Python学习之余,摸摸鱼
    Python 实现斐波那契数
    Linux下为什么目录的大小总是4096
    Python的精髓居然是方括号、花括号和圆括号!
    为什么说Python是最伟大的语言?看图就知道了!
    前端常用知识(会更新)
    Mysql 约束
    Navicat 安装
    Java后台将CTS格式转为标准日期时间格式返回给前端
    MySQL数据库报错“Zero date value prohibited”
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/3855386.html
Copyright © 2011-2022 走看看