#TCPlib 使用说明
---
###本项目基于 TCP 协议与服务端保持长连接,随时与服务端进行通信,意外断网可以进行自动重连,确保消息不会丢失
###使用方法:
#####初始化
- [x] 请在 Application 或者主 Activity 中进行
- [x] 使用之前必需进行初始化
NetManager.instance().init(this);
SocketThreadManager manager = SocketThreadManager.sharedInstance();
#####参数配置
- [x] 设置服务端地址及端口
manager.setAddress("192.168.1.208",10001);
- [x] 设置回调方法(实现 SocketCallback 接口)
manager.setSocketCallback(new SocketCallback() {
@Override
public void callback(int code, byte[] result) {
}
});
- [x] 设置是否发送心跳包(默认进行心跳包发送,不进行心跳包发送在断线后将不会自动重连)
manager.setHeartBeat(true);
- [x] 设置心跳包发送时间间隔(单位/秒)
manager.setHeartBeatDuration(30);
- [x] 设置接收服务端信息最信息长度(默认1024字节,最小为512字节)
manager.setReceiveDataSize(2048);
#####具体调用
- [x] 开启连接线程连接服务器(请确保网络连接正常)
manager.startThreads();
- [x] 发送数据
manager.sendMsg(byte [] buffer)
- [x] 结束连接
manager.stopThreads();
- [x] 退出程序
manager.releaseInstance();
#####其它说明
- [x] SocketCallback 接口返回参数
<table>
<tr>
<th>code</th>
<th>result</th>
<th>说明</th>
</tr>
<tr>
<td>Constant.CONNECT_SUCCESS = 200</td>
<td>null</td>
<td>连接服务器成功</td>
</tr>
<tr>
<td>Constant.CONNECT_FAIL = 201</td>
<td>null</td>
<td>连接服务器失败</td>
</tr>
<tr>
<td>Constant.CONNECT_CLOSE = 202</td>
<td>null</td>
<td>连接关闭</td>
</tr>
<tr>
<td>Constant.SOCKET_READDATA = 203</td>
<td>字节数组 byte[]</td>
<td>接收到服务器发送的消息</td>
</tr>
<tr>
<td>Constant.SOCKET_SENDMSG_SUCCESS = 204</td>
<td>null</td>
<td>发送消息成功</td>
</tr>
<tr>
<td>Constant.SOCKET_SENDMSG_FAIL = 205</td>
<td>null</td>
<td>发送消息失败</td>
</tr>
</table>
- [x] PositionOptions 位置信息上报类
PositionOptions options = new PositionOptions.Builder()
.setAlarmSign(int[] alarmSign) // 报警标志的位数数组(如:{1,5,11})
.setStatus(int[] status) // 状态的位数数组(如:{2,7,13})
.setLatitude(int lat) // 纬度 22.123456*1000000
.setLongitute(int lon) // 经度 120.123456*1000000
.setHeight(short height) // 海拔 123m
.setSpeed(short speed) // 速度 单位: 1/10km/h
.setDirection(short direction) // 方向 0-359,正北为 0,顺时针
.setPhoneNumber(String phoneNumber) // 终端手机号
.setDeviceID(String deviceID) // 终端设备ID
.setSerialNum(short serialNum) // 消息流水号,从0开始循环累加
.setRSAEncrypt(boolean RSAEncrypt) // 消息体是否经过RSA加密
.setSM1Encrypt(boolean SM1Encrypt) // 消息体是否经过SM1加密
.setSubPackage(boolean subPackage) // 消息体是否分包
.setTime(String time) // 时间 YYMMDDhhmmss UTC 时间 ,如果是北京时间需减去 8 小时
.build();
options.toByteArray() // 转化成字节数组
options.toCharArray(String charset) // 转化成字符数组(charset 字符编码)
- [x] ByteUtils 工具类
/**
* 标识位转义
* @param bytes
* @return
*/
public static byte[] markReplace(byte[] bytes)
/**
* @功能: BCD码转为10进制串(阿拉伯数据)
* @参数: BCD码
* @结果: 10进制串
*/
public static String bcd2Str(byte[] bytes)
/**
* 10进制串转为BCD码
* @param asc
* @param becLen BCD码长度
* @return
*/
public static byte[] str2Bcd(String asc , int becLen)
/**
* @功能: 10进制串转为BCD码
* @参数: 10进制串
* @结果: BCD码
*/
public static byte[] str2Bcd(String asc)
/**
* 获取消息头
* @param msgId 消息id 类型:WORD 字节数:2
* @param porperty 消息体属性 类型:WORD 字节数:2
* 数据加密方式如下:
a) bit0-bit9 为消息体长度
b) bit10-bit12 为数据加密标识位,当此三位都为 0,表示消息体不加密。
d) 当第 10 位为 1,表示消息体经过 RSA 算法加密。
e) 当第 11 位为 1,表示消息体经过 SM1 算法加密。
f) 当第 13 位为 1,进行分包,否则 subpackage 为 0x00000000
g) 其他保留。
* @param phone 终端手机号 类型:BCD[6] 字节数:6
* @param deviceId 终端 ID 类型:BCD[6] 字节数:6
* @param order 消息流水号 类型:WORD 字节数:2
* @param subpackage 消息包封装项 如果消息体属性中相关标识位确定消息分包处理, 则该项有内容,如果消息没有分包处理,设置为 0x00000000
* @return
*/
public static byte[] getMsgHead(MessageID msgId, byte[] porperty , String phone , String deviceId ,
short order , byte[] subpackage)
/**
* 校验码是指从消息头开始,同后一字节异或,直到校验码前一个字节,占用一个字节
* @param head
* @param body
* @return
*/
public static byte getCheckCode(byte[] head , byte[] body)
/**
* 获取消息体属性(信息体最长不能超过 1Kb )
* @param length 消息体长度
* @param isRSA 是否RSA加密
* @param isSM1 是否SM1加密
* @param isSub 是否分包
* @return
*/
public static byte[] getMsgProperty(int length, boolean isRSA ,boolean isSM1 , boolean isSub)
/**
* 获取消息包封装项内容 (两个参数都为 0 表示没有分包)
* @param packNum 消息总包数
* @param serial 包序号(从1开始)
* @return
*/
public static byte[] getPackInfo( short packNum , short serial)
/**
* 依据
评论3
最新资源