百度都在用的Android SocketClient及使用实例

Home / Android MrLee 2020-3-3 2583

即使nio用的非常出色也不影响掌握这个SocketClient类库,学习这玩意儿,多多益善嘛!更何况百度人脸识别SDK也在用,附件带上库文件。

首先贴上GitHub下载链接:点击打开链接

https://github.com/vilyever/AndroidSocketClient

首先下载下来并解压,这里着重提醒一下:一定不要下载GitHub上最新的库版本,因为新的版本第一是复杂,第二是原作者给整出了一些bug,导致onResponse一直不回调。后来我下载了一个老的版本(2.0.1),就没有上面的问题。

红色部分引自网络,这里只给出jar库文件及代码

private SocketClient socketClient;
private SocketClientDelegate delegate;
//socket通信
private void startSocketClient(String info) throws IOException {
    String[] array = info.split("_");
    socketClient = new SocketClient();
    socketClient.getAddress().setRemoteIP(array[0]);//设置IP,这里设置的是本地IP
    socketClient.getAddress().setRemotePort(Integer.parseInt(array[1]));//设置端口
    socketClient.getAddress().setConnectionTimeout(15 * 1000);//设置超时时间
    socketClient.setCharsetName(CharsetUtil.UTF_8);//设置编码格式,默认为UTF-8
    socketClient.connect(); // 连接,异步进行
    //常用回调配置
    // 对应removeSocketClientDelegate
    socketClient.registerSocketClientDelegate(delegate = new SocketClientDelegate() {
        /**
         * 连接上远程端时的回调
         */
        @Override
        public void onConnected(SocketClient client) {
            Log.d("melog", "gamesocket连接成功");
            launcher.callExternalInterface("gameSocketConnectSuccess", "success");
        }
        /**
         * 与远程端断开连接时的回调
         */
        @Override
        public void onDisconnected(SocketClient client) {
            Log.d("melog", "gamesocket连接断开");
            // 可在此实现自动重连
            // socketClient.connect();
            launcher.callExternalInterface("socketClose", "close");
        }
        /**
         * 接收到数据包时的回调
         */
        @Override
        public void onResponse(SocketClient client, @NonNull SocketResponsePacket responsePacket) {
            String message = responsePacket.getMessage(); // 获取按默认设置的编码转化的String,可能为null
            launcher.callExternalInterface("socketDataHandler", message);
        }
    });
}
//发送消息
private void socketSendMessage(String info) {
    String status = String.valueOf(socketClient.getState());
    if (socketClient != null && status == "Connected") {
        socketClient.sendData(info.getBytes()); // 发送byte[]消息
    }
}
//前台请求gamesocket连接状态
private void requestGameSocketConnectFlg() {
    String status = String.valueOf(socketClient.getState());
    launcher.callExternalInterface("gameSocketFlg", status);
}
//前台主动断开gamesocket
private void closeGameSocket() {
    if (socketClient != null) {
        socketClient.removeSocketClientDelegate(delegate);
        socketClient.disconnect();
    }
}

如果有哪里不太明白,可以仔细阅读下github上的详细说明。但是那个说明是按照最新版本讲解的,跟老版本差别还是很大的,比如设置读取策略socketClient.getSocketPacketHelper().setReadStrategy(); 这个在老版本就没有。

本文链接:https://www.it72.com/12596.htm

上传的附件:
推荐阅读
最新回复 (0)
返回