# CSocket **Repository Path**: android_common_library/CSocket ## Basic Information - **Project Name**: CSocket - **Description**: android轻量级客户端socket - **Primary Language**: Android - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2020-01-08 - **Last Updated**: 2022-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CSocket使用文档 ### 1.简介 Android端轻量级socket通信客户端,采用aidl通信方式。支持websocket方式或原始socket方式通信,支持同时开启多个socket或websocket连接。 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0821/151542_6266c682_641944.png "CSocket_Framework.png") ### 2.特性 * [x] 采用aidl跨进程通信方式。 * [x] 支持socket通信和websocket通信。 * [x] 支持同时开启多个socket或websocket通信。 * [x] 支持socket通信自定义通信协议解析格式。 * [x] 支持socket断开重连。 * [x] 支持开发者自定义socket通信协议解析。 * [x] 内置简单的心跳定时器。 * [x] 默认实现基于okhttp的websocket。 * [x] 默认实现基于java阻塞的socket。 * [x] 内置json帧解码器。`socket` * [x] 内置换行符(\r\n|\n)帧解码器。`socket` ### 3.使用方式 1. 拷贝工程或者编译好的jar包到项目中。 ``` //使用websocket需要引入okhttp的jar包 implementation 'com.squareup.okhttp3:okhttp:4.7.2' //使用原生socket需要引入以下jar implementation 'io.netty:netty-buffer:4.1.51.Final' //引入netty-buffer时,需要在build.gradle中添加如下配置,防止编译报错 android{ packagingOptions { exclude 'META-INF/io.netty.versions.properties' } } ``` 2. 注册清单配置 `androidManifest.xml` ``` ``` 3. 初始化socket服务 ``` CSocket.getInstance().init(context, new CSocket.OnServiceListener() { @Override public void onBindSuccess() { Log.i(TAG, "===>onBindSuccess"); startSocket(); } @Override public void onBindError() { Log.i(TAG, "===>onBindError"); } @Override public void onUnBind() { Log.i(TAG, "===>onUnBind"); } }); private void startSocket() { ClientConfig connConfig = new ClientConfig("default"); connConfig.setFrameworkType(SocketFrameworkType.SOCKET_JAVA_BLOCK); connConfig.setWebsocketUrl("ws://172.16.11.20:9802"); connConfig.setReconnectInterval(2000); connConfig.setSocketUrl("192.168.22.110:9802"); connConfig.setClientId("ws-test"); //配置心跳定时器 DogManager.getInstance().setDog(new ErhaDog(this)).setDogListener(new DogFather.DogListener() { @Override public void lookup(int count, int maxCount) { Log.i(TAG, "ping====>" + count + "#" + maxCount); CSocket.getInstance().sendMessage("ws-test", buildHeartbeat().toString()); } }); CSocket.getInstance().start(connConfig, new OnCSocketListener() { @Override public void onOpen(String channelId, byte[] response) { Log.i(TAG, "onOpen====>" + channelId); DogManager.getInstance().lookup(); } @Override public void onMessage(String channelId, String message) { Log.i(TAG, "onMessage====>" + channelId + "#" + message); DogManager.getInstance().feedDog(); } @Override public void onFailure(String channelId, String exceptionClass, String msg) { super.onFailure(channelId, exceptionClass, msg); Log.e(TAG, "onFailure====>" + channelId + "#" + exceptionClass + "#" + msg); } @Override public void onReconnecting(String clientId, int count) { Log.e(TAG, "onReconnecting====>" + clientId + "#" + count); } }); } ``` 4. 清除socket服务 ``` DogManager.getInstance().goHome(); CSocket.getInstance().release(); ``` ### 4.内置socket实现 `SocketFrameworkType` |类型|描述|是否可用| |:--------:|:----------:|:--------:| |SOCKET_JAVA_BLOCK|原生java阻塞socket(tcp)通信类型|可用| |SOCKET_JAVA_NIO|原生java阻塞socket(tcp)通信类型|未实现| |WEBSOCKET_OKHTTP|基于okhttp实现的websocket通信类型|可用| ### 5.配置属性`ClientConfig` |字段|描述| |:--------:|:----------:| | clientId | 自定义通道唯一编码(多客户端时根据该编码进行分发)| | socketUrl | socket连接地址| | websocketUrl| websocket连接地址| | isAutoReconn| 是否自动重连,默认开启| | reconnectInterval| 重连自增步长,默认10s(单位ms)| | reconnectMaxTime | 最大重连间隔,默认2min(单位ms)| |frameworkType|使用的socket框架类型| |decodeMaxLength|原生socket通信帧缓存buf数组最大长度,默认1024字节| |decodeClsName|原生socket数据解码器配置,默认使用LineBasedFrameDecoder| ### 7.代码混淆 ``` -keep class com.bobo.mm.**{*;} ```