添加依赖
1.在项目的gradle里加入以下代码
maven { url "https://jitpack.io" }
2.在moudle的gradle里面加入以下代码
compile 'com.github.vilyever:AndroidSocketClient:3.0.3'
3.简单使用
SocketClient socketClient = new SocketClient("192.168.1.1", 80);
socketClient.registerSocketDelegate(new SocketClient.SocketDelegate() {
@Override
public void onConnected(SocketClient client) {
socketClient.sendString("message"); // 发送String消息,使用默认编码
socketClient.sendData("message".getBytes()); // 发送byte[]消息
}
@Override
public void onDisconnected(SocketClient client) {
}
@Override
public void onResponse(SocketClient client, @NonNull SocketResponsePacket responsePacket) {
byte[] data = responsePacket.getData(); // 获取byte[]数据
String msg = responsePacket.getMessage(); // 使用默认编码获取String消息
}
});
socketClient.setConnectionTimeout(1000 * 15); // 设置连接超时时长
socketClient.setCharsetName("UTF-8"); // 设置发送和接收String消息的默认编码
socketClient.getHeartBeatHelper().setSendString("heart beat"); // 设置自动发送心跳包的
字符串,若为null则不发送心跳包
socketClient.getHeartBeatHelper().setSendData("heart beat".getBytes()); // 同上
socketClient.getHeartBeatHelper().setHeartBeatInterval(30 * 1000); // 设置自动发送心跳
包的时间间隔,若值小于0则不发送心跳包
socketClient.getHeartBeatHelper().setReceiveString("heart beat from remote"); // 设
置从远程端接收的心跳包字符串,onResponse回调将过滤此信息,若为null则不过滤
socketClient.getHeartBeatHelper().setReceiveData("heart beat from remote".getBytes()); // 同上
socketClient.getHeartBeatHelper().setRemoteNoReplyAliveTimeout(60 * 1000); // 设置远
程端多长时间内没有消息发送到本地就自动断开连接,若值小于0则不自动断开
socketClient.getPollingHelper().registerQueryResponse("query", "response"); // 设置自
动应答键值对,即收到"query"时自动发送"response"
socketClient.getSocketPacketHelper().setSendTailString("\r\n"); // 设置发送消息时自动在
消息尾部添加的信息,远程端收到此信息后表示一条消息结束,用于解决粘包分包问题,若为null则不添加尾部信
息
socketClient.getSocketPacketHelper().setSendTailData("\r\n".getBytes()); // 同上
socketClient.getSocketPacketHelper().setReceiveTailString("\r\n"); // 设置接收消息时判
断消息结束的尾部信息,用于解决粘包分包问题,若为null则每次读取InputStream直到其为空,可能出现粘包
问题
socketClient.getSocketPacketHelper().setReceiveTailData("\r\n".getBytes()); // 同上
socketClient.connect(); // 连接,异步进行
socketClient.disconnect(); // 断开连接
socketClient.getState(); // 获取当前状态,Connecting, Connected, Disconnected
我的使用
socketClient = new SocketClient();//创建对象
socketClient.getAddress().setRemoteIP(IPUtil.getLocalIPAddress(true));//设置IP,这里设置的是本地IP
socketClient.getAddress().setRemotePort("8080");//设置端口
socketClient.getAddress().setConnectionTimeout(15 * 1000);//设置超时时间
socketClient.setCharsetName(CharsetUtil.UTF_8);//设置编码格式,默认为UTF-8
//常用回调配置
// 对应removeSocketClientDelegate
socketClient.registerSocketClientDelegate(new SocketClientDelegate() {
/**
* 连接上远程端时的回调
*/
@Override
public void onConnected(SocketClient client) {
SocketPacket packet = socketClient.sendData(new byte[]{0x02}); // 发送消息
packet = socketClient.sendString("sy hi!"); // 发送消息
socketClient.cancelSend(packet); // 取消发送,若在等待发送队列中则从队列中移除,若正在发送则无法取消
}
/**
* 与远程端断开连接时的回调
*/
@Override
public void onDisconnected(SocketClient client) {
// 可在此实现自动重连
socketClient.connect();
}
/**
* 接收到数据包时的回调
*/
@Override
public void onResponse(final SocketClient client, @NonNull SocketResponsePacket responsePacket) {
byte[] data = responsePacket.getData(); // 获取接收的byte数组,不为null
String message = responsePacket.getMessage(); // 获取按默认设置的编码转化的String,可能为null
}
});
//发送状态回调配置
// 对应removeSocketClientSendingDelegate
socketClient.registerSocketClientSendingDelegate(new SocketClientSendingDelegate() {
/**
* 数据包开始发送时的回调
*/
@Override
public void onSendPacketBegin(SocketClient client, SocketPacket packet) {
}
/**
* 数据包取消发送时的回调
* 取消发送回调有以下情况:
* 1. 手动cancel仍在排队,还未发送过的packet
* 2. 断开连接时,正在发送的packet和所有在排队的packet都会被取消
*/
@Override
public void onSendPacketCancel(SocketClient client, SocketPacket packet) {
}
/**
* 数据包发送的进度回调
* progress值为[0.0f, 1.0f]
* 通常配合分段发送使用
* 可用于显示文件等大数据的发送进度
*/
@Override
public void onSendingPacketInProgress(SocketClient client, SocketPacket packet, float progress, int sendedLength) {
}
/**
* 数据包完成发送时的回调
*/
@Override
public void onSendPacketEnd(SocketClient client, SocketPacket packet) {
}
});
//接收状态回调配置
// 对应removeSocketClientReceiveDelegate
socketClient.registerSocketClientReceiveDelegate(new SocketClientReceivingDelegate() {
/**
* 开始接受一个新的数据包时的回调
*/
@Override
public void onReceivePacketBegin(SocketClient client, SocketResponsePacket packet) {
}
/**
* 完成接受一个新的数据包时的回调
*/
@Override
public void onReceivePacketEnd(SocketClient client, SocketResponsePacket packet) {
}
/**
* 取消接受一个新的数据包时的回调
* 在断开连接时会触发
*/
@Override
public void onReceivePacketCancel(SocketClient client, SocketResponsePacket packet) {
}
/**
* 接受一个新的数据包的进度回调
* progress值为[0.0f, 1.0f]
* 仅作用于ReadStrategy为AutoReadByLength的自动读取
* 因AutoReadByLength可以首先接受到剩下的数据包长度
*/
@Override
public void onReceivingPacketInProgress(SocketClient client, SocketResponsePacket packet, float progress, int receivedLength) {
}
});