AndroidSocketClient简单使用

添加依赖

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) {
        }
    });

你可能感兴趣的:(网络,socket,框架,gradle,maven)