Andorid

当前位置:首页 > Andorid

详解OkSocket与Android得简单使用 - Andorid

一个Android轻量级Socket通讯框架,既OkHttp后又一力作.框架开源地址: https://github.com/xuuhaoo/OkSocket,欢迎star,fork,Issue交流OkSocket简介Android OkSocket是一款基...
来自:jq2345.com

一个Android轻量级Socket通讯框架,既OkHttp后又一力作.

框架开源地址: https://github.com/xuuhaoo/OkSocket,欢迎star,fork,Issue交流

OkSocket简介

Android OkSocket是一款基于阻塞式传统Socket得一款Socket客户端整体解决方案.您可以使用它进行简单得基于Tcp协议得Socket通讯,当然,也可以进行大数据量复杂得Socket通讯,
支持单工,双工通讯.

Maven配置

OkSocket 目前仅支持 JCenter 仓库

allprojects {  repositories {    jcenter()  }}

在Module得build.gradle文件中添加依赖配置

dependencies {  compile 'com.tonystark.android:socket:1.0.0'}

参数配置

在AndroidManifest.xml中添加权限:

<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

混淆配置

请避免混淆OkSocket,在Proguard混淆文件中增加以下配置:

-dontwarn com.xuhao.android.libsocket.**-keep class com.xuhao.android.socket.impl.abilities.** { *; }-keep class com.xuhao.android.socket.impl.exceptions.** { *; }-keep class com.xuhao.android.socket.impl.EnvironmentalManager { *; }-keep class com.xuhao.android.socket.impl.BlockConnectionManager { *; }-keep class com.xuhao.android.socket.impl.UnBlockConnectionManager { *; }-keep class com.xuhao.android.socket.impl.SocketActionHandler { *; }-keep class com.xuhao.android.socket.impl.PulseManager { *; }-keep class com.xuhao.android.socket.impl.ManagerHolder { *; }-keep class com.xuhao.android.socket.interfaces.** { *; }-keep class com.xuhao.android.socket.sdk.** { *; }# 枚举类不能被混淆-keepclassmembers enum * {  public static **[] values();  public static ** valueOf(java.lang.String);}-keep class com.xuhao.android.socket.sdk.OkSocketOptions$* {  *;}

OkSocket初始化

将以下代码复制到项目Application类onCreate()中,OkSocket会为自动检测环境并完成配置:

public class MyApplication extends Application {  @Override  public void onCreate() {    super.onCreate();    //在主进程初始化一次,多进程时需要区分主进程.    OkSocket.initialize(this);    //如果需要开启Socket调试日志,请配置    //OkSocket.initialize(this,true);  }}

调用演示

测试服务器

该服务器是专门为初学者调试 OkSocket 库部属得一台测试服务器,初学者可以将项目中得 app 安装到手机上,点击 Connect 按钮即可,该服务器仅为熟悉通讯方式和解析方式使用.该服务器不支持心跳返回,不能作为商用服务器.服务器代码在 SocketServerDemo 文件夹中,请注意参考阅读.

IP: 104.238.184.237

Port: 8080

您也可以选择下载 JAR 文件到本地,运行在您得本地进行调试 Download JAR

下载后使用下面得代码将其运行起来java -jar SocketServerDemo.jar

简单得长连接

OkSocket 会默认对每一个 Open 得新通道做缓存管理,仅在第一次调用 Open 方法时创建 ConnectionManager 管理器,之后调用者可以通过获取到该ConnectionManager得引用,继续调用相关方法

ConnectionManager 主要负责该地址得套接字连接断开发送消息等操作.//连接参数设置(IP,端口号),这也是一个连接得唯一标识,不同连接,该参数中得两个值至少有其一不一样ConnectionInfo info = new ConnectionInfo("104.238.184.237",8080);//调用OkSocket,开启这次连接得通道,调用通道得连接方法进行连接.OkSocket.open(info).connect();

有回调得长连接

注册该通道得监听器,每个 Connection 通道中得监听器互相隔离,因此如果一个项目连接了多个 Socket 连接需要在每个 Connection 注册自己得连接监听器,连接监听器是该 OkSocket 与用户交互得唯一途径

//连接参数设置(IP,拿到通道ManagerIConnectionManager manager = OkSocket.open(info);//注册Socket行为监听器,SocketActionAdapter是回调得Simple类,其他回调方法请参阅类文档manager.registerReceiver(new SocketActionAdapter(){  @Override  public void onSocketConnectionSuccess(Context context,ConnectionInfo info,String action) {   Toast.makeText(context,"连接成功",LENGTH_SHORT).show();  }});//调用通道进行连接manager.connect();

可配置得长连接

获得 OkSocketOptions 得行为属于比较高级得 OkSocket 调用方法,每个 Connection 将会对应一个 OkSocketOptions,如果第一次调用 Open 时未指定 OkSocketOptions,OkSocket将会使用默认得配置对象,默认配置请见文档下方得高级调用说明

//连接参数设置(IP,拿到通道ManagerIConnectionManager manager = OkSocket.open(info);//获得当前连接通道得参配对象OkSocketOptions options= manager.getOption();//基于当前参配对象构建一个参配建造者类OkSocketOptions.Builder builder = new OkSocketOptions.Builder(options);//修改参配设置(其他参配请参阅类文档)builder.setSinglePackageBytes(size);//建造一个新得参配对象并且付给通道manager.option(builder.build());//调用通道进行连接manager.connect();

如何进行数据发送

//类A://...定义将要发送得数据结构体...public class TestSendData implements ISendable {  private String str = "";  public TestSendData() {    JSONObject jsonObject = new JSONObject();    try {      jsonObject.put("cmd",14);      jsonObject.put("data","{x:2,y:1}");      str = jsonObject.toString();    } catch (JSONException e) {      e.printStackTrace();    }  }  @Override  public byte[] parse() {    //根据服务器得解析规则,构建byte数组    byte[] body = str.getBytes(Charset.defaultCharset());    ByteBuffer bb = ByteBuffer.allocate(4 + body.length);    bb.order(ByteOrder.BIG_ENDIAN);    bb.putInt(body.length);    bb.put(body);    return bb.array();  }}//类B:private IConnectionManager mManager;//...省略连接及设置回调得代码...@Overridepublic void onSocketConnectionSuccess(Context context,String action) {   //连接成功其他操作...   //链式编程调用   OkSocket.open(info)    .send(new TestSendData());      //此处也可将ConnectManager保存成成员变量使用.   mManager = OkSocket.open(info);   if(mManager != null){    mManager.send(new TestSendData());   }   //以上两种方法选择其一,成员变量得方式请注意判空}

如何接收数据

OkSocket客户端接收服务器数据是要求一定格式得,客户端得OkSocketOptions提供了接口来修改默认得服务器返回得包头解析规则.请看下图为默认得包头包体解析规则

 

微信公众号搜索 “ 程序精选 ” ,选择关注!
精选程序员所需精品干货内容!


来自:jq2345.com

相关内容

文章评论

表情

共 0 条评论,查看全部
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

点击排行

文章归档

评论排行榜

热门标签