Android上KCP协议的使用

天街孤独 · · 2106 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

有关KCP协议,可以参阅KCP协议
目前比较成熟完备的解决方案是kcptun。kcptun在kcp协议的基础止,做了很多优化,包括前向纠错(FEC),差分服务代码点(DSCP),加解密,压缩。本文讲述把kcptun移植到Android端的过程。

1.Go环境准备

kcptun本身是个Go项目,而Go项目本身是支持移植到Android或iOS客户端作为第三方库使用的。

1. Go语言环境安装

下载安装https://golang.google.cn/dl/,记得把go配置到环境变量中方便使用。

2.GoMobile工具安装

GoMobile工具用于编译和运行Android和iOS应用。
首先安装:

go get golang.org/x/mobile/cmd/gomobile

成功后:

gomobile init

如果安装失败,通常是网络问题,可以使用国内镜像:
a. 安装gopm

go get -u github.com/gpmgo/gopm

b. 用gopm get -g 代替go get

gopm get -g golang.org/x/net  

也可以简单的从github上克隆相应的为库到gopath目录下。

2. Go项目编译

客户端只是kcptun的client部分。将kcptun下的client文件夹放到gopath的go/src/golang.org/x/mobile/example/目录下。
开始编译之前做一些小修改。

  1. 修改client下的三个文件,把代码中的package main改成别的包名,如package kcpclient,否则编译不过。
  2. 修改main.go,把main方法改名为:Run,main方法是启动kcpclient的唯一入口,改成大写字母开头的方法才会暴露出来给Android使用。
  3. 在main.go预定义代码中定义一个配置路径属性CONFIGPATH,修改Run方法代码片段:
        if c.String("c") != "" {
            err := parseJSONConfig(&config, c.String("c"))
            checkError(err)
        }else if CONFIGPATH != "" {
            err := parseJSONConfig(&config, CONFIGPATH)
            checkError(err)
        }

这里加入的CONFIGPATH属性,并且暴露给客户端,可以在启动kcp client前通过setCONFIGPATH,传入配置的json文件路径,对kcp client进行自定义参数配置。

上面修改完成后,进入到client目录,执行

gomobile bind -target=android

编译完成后,得到kcpclient.aar以及kcpclient-sources.jar。

3.移植到Android端使用

把kcpclient.aar和kcpclient-sources.jar加入依赖。
启动kcp client是个网络操作,所以要放到子线程进行操作。最简单的做法是:

       new Thread() {
            @Override
            public void run() {
                super.run();
                //这里设置自己的kcp client配置,也可不调用,使用默认配置
                Kcpclient.setCONFIGPATH("xxxx");
                Kcpclient.run();
            }
        }.start();


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:天街孤独

查看原文:Android上KCP协议的使用

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2106 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传