4. Android客户端开发指南

4.1 概述

  客户端 P2P 实时传输 SDK 库简称为 libt2u。

  libt2u 的主要作用是将远端设备上的端口映射到本地,随后客户端就可以象直接使用 TCP/UDP 协议访问设备(设备IP地址:端口)一样(127.0.0.1:映射端口)访问远端设备。

  虽然我们已经将建立 P2P 通道的时间优化至短短的3秒,但是为了让用户有更好的体验,我们建议,在客户端应用程序开启后,可以先与所有可能需要创建 P2P 连接的设备预先创建好 P2P 通道,从而使之后的交互可以立即进行。保持预先创建好的 P2P 通道只需要消耗极少量的系统资源和带宽。

  在 Android 平台下,可以使用 Java 调用我们已经封装好的 jar 包接口进行开发,也可以使用 C 语言直接调用动态库中的接口函数,然后自己编写 JNI 接口来供 Java 层调用,两者没有本质区别。

4.2. 开发步骤

4.2.1. 创建Android应用程序项目

4.2.2. 导入SDK库

  将开发包中的 libt2u.jar 和 libs 目录下的动态库复制到 Android 工程的 libs 目录(如果没有该目录,创建一个)。

  在开发包中的 libs 目录下,有针对多种处理器版本的动态库,通常选用armeabi目录即可,如图所示:

4.2.3. 添加用户权限

  在工程 AndroidManifest.xml 文件中添加如下权限:

<!--连接网络权限 -->  
<uses-permission android:name="android.permission.INTERNET"/>  

4.2.4. 导入类

import com.vveye.T2u;

4.2.5. 初始化

T2u.Init("nat.vveye.net", (char)8000, "");

  这是初始化接口,在应用启动时调用一次即可,不需要每次创建P2P通道时都调用。

  参见接口:T2u.Init

  初始化后,调用查询状态函数,等待客户端连接上服务器,代码如下:

while(T2u.Status() == 0)//如果状态为0,表示还未连接上服务器
{
    SystemClock.sleep(1000);//等待1秒后继续
    Log.d("T2u","T2u.Status=" + T2u.Status());//在日志中打印当前状态
}

  参见接口:T2u.Status

4.2.6. 查询设备是否在线

  在与设备创建 P2P 连接前,可以先查询一下设备是否在线,如果不在线,就没必要进行后面的步骤了,代码如下:

int ret;
//---------------查询设备是否在线-----------------
ret = T2u.Query("设备uuid");

  如果返回值是1,表示在线,参见接口:T2u.Query

4.2.7. 映射端口

  将设备的端口映射到本地,假如在设备上有一个 web 服务,服务端口是 80,我们将设备上的 80 端口映射到本机的 8080 端口上,代码示例如下:

int port = T2u.AddPort("设备uuid", (char)80, (char)8080);

  返回值是已映射的端口,在本例中,已经指定了映射到本地的端口号,实时应用中,由于指定端口可能存在已被占用的情况,因此可以将最后一个参数设置为 0,接口函数自动分配一个可用的端口,并在返回值中返回。

  参见接口:T2u.AddPortEx

4.2.8. 等待映射结果

while(T2u.PortStatus(port)!=0)//如果状态不为1,表示还未创建成功
{
    SystemClock.sleep(1000);//等待1秒后继续
    Log.d("T2u", "T2u.PortStatus=" + T2u.PortStatus(port));//在日志中打印当前 P2P 连接状态
}

  返回 1 时表示映射成功。

  参见接口:T2u.PortStatus

4.2.9. 映射成功后,使用标准TCP连接流程进行后续工作

  眏射成功后,就可以按标准的TCP连接流程进行后续工作,本例中,已将设备端的 80 端口映射到本地的 8080 端口上,此时打开手机的浏览器,在地址栏中输入:http://127.0.0.1:8080,将打开设备端的 web 页面。

4.2.10. 关闭 P2P 连接

T2u.DelPort(port);

  关闭 P2P 通道,所有使用该 P2P 通道的 TCP 连接也会中断。参数 port 是由 AddPortV3 映射的本地端口。

  参见接口:T2u.DelPort

4.2.11. 退出程序时释放资源

T2u.Exit();

  退出时释放资源。

  参见接口:T2u.Exit

详细的 API 接口,请参见libt2u Android API 接口说明

SDK 库及 DEMO 程序,请从这里下载。