【问题标题】:How to know that a device on the a network is offering a service without being connected to the network如何知道网络上的设备在未连接到网络的情况下提供服务
【发布时间】:2015-08-07 22:40:05
【问题描述】:

我想知道设备上的应用程序如何知道相邻网络的设备提供特定服务而无需连接到网络。 我将以名为 Xender 的移动应用程序为例。当您启动此应用程序并单击“创建组”时,它会创建一个 hotspot,其默认设备热点名称为网络的 SSID,当另一台设备启动该应用程序并单击“加入组”时",该设备能够通过感知周围的网络来查看周围的可用设备。第二个设备能够接收到第一个设备的名称,甚至无需连接到第一个设备创建的网络。 这怎么可能?尤其是在安卓中。

【问题讨论】:

    标签: android ios networking network-programming connection


    【解决方案1】:

    Xender 只是对 SSID 进行编码,就像如果您设置名称“xx”,那么 SSID 将是 ADYXeHg 或 ADYYeHg 或其他名称,但 ADY_eHg 字母在不同设备中以相同的名称“xx”保持相同,因此我们只需解码该方法Xender。

    我猜他们使用密码加密将配置文件名称转换为 SSID。

    这就是 xender 代码在加密中的样子(热点方面)。

    代码:这不是 xender 的代码,它是我编写的。

    public String Encry(String sc) {
        int i;
        String data = sc;
        StringBuffer pas = new StringBuffer(data);
        for (i = 0; i < pas.length(); i++) {
    
            int temp = 0;
            temp = (int) pas.charAt(i);
            temp = temp - 10;
            pas.setCharAt(i, (char) temp);
        }
        String data1 = "robo" + pas;
        String[] one = data1.split("robo");
        String s = Arrays.toString(one);
        s = s.substring(1, s.length()-1).replaceAll(",", "");
        StringBuffer tu = new StringBuffer(s);
    
        for (i = 0; i < tu.length(); i++) {
            int da = 0;
            da = (int) tu.charAt(i);
            da = da + 10;
            tu.setCharAt(i, (char) da);
        }
        System.out.println("\n");
        String star = tu.toString();
        star = star.substring(1, star.length() - 1).replaceAll(",", ""); // remove " * " from String.
        return data1;
    }
    

    这就是二加密的工作原理(加入网络端): 注意:这不是 xender 的代码,它是我编写的。

    public String Dicry(String SSID) {
    
        int i;
        String data1 = SSID;
        String[] one = data1.split("robo");
        String s = Arrays.toString(one);
        s = s.substring(1, s.length()).replaceAll(",", "");
        StringBuffer tu = new StringBuffer(s);
        for (i = 0; i < tu.length(); i++) {
            int da = 0;
            da = (int) tu.charAt(i);
            da = da + 10;
            tu.setCharAt(i, (char) da);
        }
        String star = tu.toString();
        star = star.substring(1, star.length()).replaceAll(",", ""); // remove " * " from String.
        return star;
     } // scanner
    

    注意:此代码由我编写。它不是 xender 的原始代码。请记住这一点。

    这就是密码加密的工作原理。

    【讨论】:

    • 您的回答似乎很合乎逻辑。我变得更清楚了。认为你是对的
    【解决方案2】:

    当你创建一个组时,Xender 所做的就是创建一个热点,比如你的家庭路由器。

    路由器在开启时所做的是广播其名称 (SSID),以便其他设备(例如您的手机或笔记本电脑)能够“识别”它们并连接到它们。

    所以基本上,当一个 Xender 应用加入另一个 Xender 应用组时,它首先连接到手机创建的热点,然后开始在该连接上共享数据。

    【讨论】:

    • 是的,你是对的?但在 Xender 的情况下,想要加入组的应用程序能够看到创建组的其他设备的名称(而不是 SSID),甚至无需连接到主机。这是怎么做到的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2013-08-29
    • 2013-06-23
    相关资源
    最近更新 更多