StupidBeauty
Read times:704Posted at: - no title specified

我存在:libexist,让局域网内的不同设备可以互相发现

内容目录

1 概述

2 变更说明

2.1 核心

2.2 GNU/Linux,C++

2.3 GNU/Linux,C++ QT5

2.4 安卓,Java

2.5 Ruby

3 下载及安装

3.1 PC版

3.1.1 GNU/Linux

3.1.1.1 C++

3.1.1.1.1 OsoLinux/RPM

3.1.1.1.2 源代码

3.1.1.2 QT5

3.1.1.2.1 OsoLinux/RPM

3.1.1.2.2 源代码

3.2 安卓版

3.3 Ruby版

4 使用

4.1 关键接口

4.1.1 GNU/Linux,C++

4.1.1.1 发布服务

4.1.2 GNU/Linux,C++ QT5

4.1.2.1 发布服务

4.1.2.2 扫描其它设备提供的服务

4.1.3 安卓,Java

4.1.3.1 发布服务

4.1.3.2 扫描其它设备提供的服务

4.1.4 Ruby

4.1.4.1 发布服务

4.2 示例

4.2.1 GNU/Linux,C++

4.2.2 GNU/Linux,C++ QT5

4.2.3 安卓,Java

4.2.3.1 发布示例

4.2.3.1.1 源代码

4.2.3.1.2 APK安装包

4.2.3.2 扫描示例

4.2.3.2.1 源代码

4.2.3.2.2 APK安装包

4.2.4 Ruby

5 文档

5.1.1 GNU/Linux,C++

5.1.2 GNU/Linux,C++ QT5

5.1.3 安卓,Java

5.1.4 Ruby

6 已知用户

6.1 兰心输入法

6.2 自动无线安卓调试器

6.3 漂亮聊天

6.4 安卓即音箱

6.5 漂亮浏览器

6.6 调码扫描器

 

1 概述

libexist,是一个跨平台的开发库,目的是让局域网内的手机、电脑等设备可以互相发现

目前支持以下平台/设备/语言:

  1. 1.安卓,Java; 

  2. 2.GNU/Linux,C++; 

  3. 3.GNU/Linux,C++ QT5 

  4. 4.Ruby。 

当前版本号:2018.8.11。

2 变更说明

2.1 核心

核心模块,具有以下变更:

  1. 1.增加报告的协议类型:TCP。 

  2. 2.增加新的语言支持:Ruby。 

2.2 GNU/Linux,C++

GNU/Linux,C++版,具有以下变更:

  1. 1.提升网络通信效率。 

  2. 2.修复问题:未连接网络时行为不正确。 

2.3 GNU/Linux,C++ QT5

GNU/Linux,C++ QT5版,具有以下变更:

  1. 1.修复问题:未连接网络时行为不正确 

  2. 2.提升稳定性。 

2.4 安卓,Java

安卓,Java版,具有以下变更:

  1. 1.提升网络通信效率。 

  2. 2.主动向局域网其它设备报告自己的存在。 

  3. 3.修复问题:未连接网络时行为不正确。 

2.5 Ruby

Ruby版本,具有以下变更:

  1. 1.主动向局域网其它设备报告自己的存在。 

3 下载及安装

3.1 PC版

3.1.1 GNU/Linux

3.1.1.1 C++

3.1.1.1.1 OsoLinux/RPM

适用于OsoLinux及RPM系列发行的RPM安装包,可在这里下载:

https://bitbucket.org/hxcan/libexist/downloads/ExistCpp-2018.8.11-15_Oso.x86_64.rpm

也可扫描下面的二维码以下载到妳的手机上,然后再传送到自己的电脑

 

下载完毕之后,使用rpm命令或yum来安装这个RPM包,就行了。

3.1.1.1.2 源代码

源代码压缩包,可在这里下载:

https://bitbucket.org/hxcan/libexist/downloads/ExistCpp-2018.8.11.tar.gz

也可扫描下面的二维码以下载到妳的手机上,然后再传送到自己的电脑

 

下载完毕之后,将得到一个名为“ExistCpp-2018.8.11.tar.gz”的gzip压缩包,将其解压之后,得到一个名为“ExistCpp-2018.8.11”的目录。在这个目录中,执行以下命令行命令即可编译安装完成:

qmake-qt5

gmake

gmake install

3.1.1.2 QT5

3.1.1.2.1 OsoLinux/RPM

适用于OsoLinux及RPM系列发行的RPM安装包,可在这里下载:

https://bitbucket.org/hxcan/libexist/downloads/ExistQt-2018.8.11-15_Oso.x86_64.rpm

也可扫描下面的二维码以下载到妳的手机上,然后再传送到自己的电脑

 

下载完毕之后,使用rpm命令或yum来安装这个RPM包,就行了。

3.1.1.2.2 源代码

源代码压缩包,可在这里下载:

https://bitbucket.org/hxcan/libexist/downloads/ExistQt-2018.8.11.tar.gz

也可扫描下面的二维码以下载到妳的手机上,然后再传送到自己的电脑

 

下载完毕之后,将得到一个名为“ExistQt-2018.8.11.tar.gz”的gzip压缩包,将其解压之后,得到一个名为“ExistQt-2018.8.11”的目录。在这个目录中,执行以下命令行命令即可编译安装完成:

qmake-qt5

gmake

gmake install

3.2 安卓

安卓版libexist库不需要专门的下载步骤,在安卓开发项目中声明对libexist库的依赖即可:

allprojects {

    repositories {

        jcenter()

    }

}

 

dependencies

        {

    //……

            compile 'com.stupidbeauty:libexist:2018.8.11'

                                //……

        }

3.3 Ruby版

使用gem即可安装Ruby版libexist库

gem install ExistRuby

4 使用

4.1 关键接口

以下说明libexist各个不同语言/平台版本的关键接口。

4.1.1 GNU/Linux,C++

4.1.1.1 发布服务

class ServicePublisher

{

public:

    ServicePublisher(); //!<默认构造函数。

    void publishService(string LanServiceName, quint16 LanServicePort, exist::ServicePublishMessage::ServiceProtocolType LanServiceProtocolType); //!<发布服务。

};

构造一个ServicePublisher对象,调用它的 publishService(string LanServiceName, quint16 LanServicePort, exist::ServicePublishMessage::ServiceProtocolType LanServiceProtocolType)方法即可向局域网内其它设备发布出自己的服务。

4.1.2 GNU/Linux,C++ QT5

4.1.2.1 发布服务

class ServicePublisher:public QObject

{

    Q_OBJECT

public:

    ServicePublisher(); //!<默认构造函数。

    void publishService(QString LanServiceName,quint16 LanServicePort,exist::ServicePublishMessage::ServiceProtocolType LanServiceProtocolType); //!<发布服务。

};

构造一个ServicePublisher对象,调用它的 publishService(QString LanServiceName,quint16 LanServicePort,exist::ServicePublishMessage::ServiceProtocolType LanServiceProtocolType)方法即可向局域网内其它设备发布出自己的服务。

4.1.2.2 扫描其它设备提供的服务

class ServicePublisher:public QObject

{

    Q_OBJECT

signals:

    void serviceDiscovered(QString serviceName,quint16 servicePort,ServicePublishMessage::ServiceProtocolType serviceProtocolType,string address); //!<信号,发现了服务。

public:

    ServicePublisher(); //!<默认构造函数。

}; //class EXISTQTSHARED_EXPORT GameInfo:public QObject

构造一个ServicePublisher对象,将某个信号槽连接到它的 serviceDiscovered(QString serviceName,quint16 servicePort,ServicePublishMessage::ServiceProtocolType serviceProtocolType,string address)信号即可在发现了局域网内其它设备发布的服务时,得到通知

4.1.3 安卓,Java

4.1.3.1 发布服务

public class ServicePublisher

{

   /**

    * 构造函数。

    * @param serviceContext 服务上下文。

    */

   public ServicePublisher(Context serviceContext)

   {

                //……

   } //public ServicePublisher()

   

   /**

    *  发布服务。

    */

   public void publishService(String LanServiceName,int LanServicePort,ExistMessageContainer.ServicePublishMessage.ServiceProtocolType LanServiceProtocolType)

   {

                //……

   } //public void publishService(LanServiceName,LanServicePort,LanServiceProtocolType)

}

 

构造一个ServicePublisher对象,调用它的 publishService(String LanServiceName,int LanServicePort,ExistMessageContainer.ServicePublishMessage.ServiceProtocolType LanServiceProtocolType)方法即可向局域网内其它设备发布出自己的服务。

4.1.3.2 扫描其它设备提供的服务

public class ServicePublisher

{

   /**

    * 停止扫描。

    */

   public void stopScanning()

   {

      //……

   } //public void stopScanning()

 

   /**

    * 开始扫描。

    */

   public void startScanning()

   {

      //……

   } //public void startScanning()

 

   /**

    * 设置服务发现事件监听器。

    * @param serviceDiscoveredListener 要设置的监听器。

     */

   public void setServiceDiscoveredListener(ServiceDiscoveredListener serviceDiscoveredListener)

   {

      //……

   } //public void setServiceDiscoveredListener(ServiceDiscoveredListener serviceDiscoveredListener)

   

   /**

    * 构造函数。

    * @param serviceContext 服务上下文。

    */

   public ServicePublisher(Context serviceContext)

   {

      //……

   } //public ServicePublisher()

}

 

构造一个ServicePublisher对象,调用setServiceDiscoveredListener(ServiceDiscoveredListener serviceDiscoveredListener)方法向它注册一个“服务发现事件监听器”,然后调用startScanning()方法以开始扫描局域网内提供服务的设备。当有局域网的设备被发现时,监听器的onServiceDiscovered(ExistMessageContainer.ExistMessage videoStreamQueryResponseMessage, InetAddress senderAddress)方法将被调用,以告知当前扫描到了局域网中的某个设备。

当妳不想再进行扫描时,调用stopScanning()方法即可停止扫描。

4.1.4 Ruby

4.1.4.1 发布服务

class ExistRuby

    # Publish a service to the LAN.

    #

    # Example:

    #   >> existRuby=ExistRuby.new

    #   >> existRuby.publishService("fp_serverPython", 10086, exist::ServicePublishMessage::ServiceProtocolType::GRPC)

    #

    # Arguments:

    #   lanServiceName: (String)

    #   lanServicePort: (int)

    #   lanServiceProtocolType: (enum)

    def publishService(lanServiceName, lanServicePort, lanServiceProtocolType)

  #…...

    end

end

构造一个ExistRuby对象,调用它的publishService(lanServiceName, lanServicePort, lanServiceProtocolType)方法即可向局域网内其它设备发布出自己的服务。

4.2 示例

以下示例具体展示了各个不同语言/平台版本的用法。

4.2.1 GNU/Linux,C++

点击以下链接下载示例源代码:

https://bitbucket.org/hxcan/libexist/downloads/ExistCppExample-2018.8.11.tar.gz

或扫描以下二维码以下载到手机,然后传送到电脑:

 

编译运行起来之后,使用“C++ QT5示例”或“安卓扫描示例”都可发现局域网中一个名为“ExistCppExample”的服务。

4.2.2 GNU/Linux,C++ QT5

点击以下链接下载示例源代码:

https://bitbucket.org/hxcan/libexist/downloads/ExistQtExample-2018.8.11.tar.gz

或扫描以下二维码以下载到手机,然后传送到电脑:

 

编译运行起来之后,即可发现局域网中一个名为“ExistCppExample”的服务,那是由“C++示例”发布出来的。

4.2.3 安卓,Java

4.2.3.1 发布示例

使用此示例可向局域网内发布一个名为“ExistAndroidPublishExample”的服务。

4.2.3.1.1 源代码

点击以下链接下载示例源代码:

https://bitbucket.org/hxcan/libexist/downloads/ExistAndroidPublishExample-2018.8.11.tar.gz

或扫描以下二维码以下载到手机,然后传送到电脑:

 

编译运行起来之后,使用“C++ QT5示例”或“安卓扫描示例”都可发现局域网中一个名为“ExistAndroidPublishExample”的服务。

4.2.3.1.2 APK安装包

这个示例应用也发布到Google Play了。

点击以下链接下载示例应用:

https://play.google.com/store/apps/details?id=com.stupidbeauty.libexist.publishexample&hl=zh_HK

或扫描以下二维码以打开Google Play Store应用以下载示例应用