step1:协议格式

自定义协议传输

step2:根据协议定义出对应的模型

  1 package com.superb.mina.entity;
  2 
  3 import java.io.ByteArrayOutputStream;
  4 import java.io.DataOutputStream;
  5 import java.io.IOException;
  6 import java.io.Serializable;
  7 import java.nio.charset.Charset;
  8 
  9 /**
 10  * 协议包
 11  * @author sundg
 12  *
 13  * 2018年3月30日上午10:55:33
 14  */
 15 public class BaseMsg implements Serializable {
 16     /** 序列号*/
 17     private static final long serialVersionUID = -4614096987747485330L;
 18     public static int HEAD_SIZE =18;
 19     /**报文总长度*/
 20     private Integer length;
 21     /**序列号*/
 22     private Integer sequence;
 23     /**命令号*/
 24     private Integer command;
 25     /**保留字*/
 26     private Integer reserved;
 27     /**数据段*/
 28     private byte[] data;
 29     
 30     private Integer separator=0xFFFF;
 31     
 32     
 33     public static long getSerialversionuid() {
 34         return serialVersionUID;
 35     }
 36 
 37     public void setLength(Integer length) {
 38         this.length = length;
 39     }
 40 
 41     public Integer getLength() {
 42         return length;
 43     }
 44 
 45     public Integer getSequence() {
 46         return sequence;
 47     }
 48 
 49     public void setSequence(Integer sequence) {
 50         this.sequence = sequence;
 51     }
 52 
 53     public Integer getCommand() {
 54         return command;
 55     }
 56 
 57     public void setCommand(Integer command) {
 58         this.command = command;
 59     }
 60 
 61     public Integer getReserved() {
 62         return reserved;
 63     }
 64 
 65     public void setReserved(Integer reserved) {
 66         this.reserved = reserved;
 67     }
 68 
 69     public byte[] getData() {
 70         return data;
 71     }
 72 
 73     public void setData(byte[] data) {
 74         this.data = data;
 75         if (data != null) {
 76             this.length = HEAD_SIZE + data.length;
 77         } else {
 78             this.length = HEAD_SIZE;
 79         }
 80     }
 81 
 82     public Integer getSeparator() {
 83         return separator;
 84     }
 85 
 86     public void setSeparator(Integer separator) {
 87         this.separator = separator;
 88     }
 89     
 90     /**
 91      * 将要发送的信息保存为二进制流进行传输
 92      * @return
 93      */
 94     public byte[] toBytes() {
 95         byte[] ret = null;
 96         try {
 97             ByteArrayOutputStream bos = new ByteArrayOutputStream(this.length);
 98             DataOutputStream dos = new DataOutputStream(bos);
 99 
100             dos.writeInt(this.length);
101             dos.writeInt(this.sequence);
102             dos.writeInt(this.command);
103             if(this.reserved==null){
104                 dos.writeInt(0);
105             }else{
106                 dos.writeInt(this.reserved);
107             }
108             if (this.data != null) {
109                 dos.write(this.data);
110             }
111             dos.writeShort(0xFFFF);
112             ret = bos.toByteArray();
113         } catch (IOException e) {
114             e.printStackTrace();
115         }
116 
117         return ret;
118     }
119     
120 }
协议包

相关文章: