我想知道设备上的应用如何知道具有提供特定服务的设备的相邻网络,甚至没有连接到网络。 我将以移动应用程序的案例为例,名为 Xender 。当您启动此应用程序并单击“创建组”时,它会创建一个热点,默认设备热点名称为网络的SSID,当另一台设备启动应用程序并单击“加入组”时“,该设备能够通过感知周围的网络来查看可用的设备。第二设备能够接收第一设备的名称,甚至不连接到由第一设备创建的网络。 这怎么可能?特别是在android。
答案 0 :(得分:1)
创建组时,Xender会做什么,正在创建一个热点,就像您的家庭路由器一样。
路由器在打开时会做什么,广播他们的名字(SSID),以便其他设备(如手机或笔记本电脑)能够“连接”它们并连接到它们。
基本上,当一个Xender应用程序加入另一个Xender应用程序组时,它首先连接到手机创建的热点,然后开始在该连接上共享数据。
答案 1 :(得分:1)
Xender只是对SSID进行编码,就像你设置名称" xx"然后SSID将是ADYXeHg或ADYYeHg或其他东西,但ADY_eHg字母在不同的设备中保持相同的名称" xx"所以我们必须解码Xender的那种方法。
我猜他们使用密码加密将配置文件名称转换为SSID。
这就是xender代码在加密中的样子(Hotspot方面)。
代码:这不是我编码的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;
}
这就是dicryption的工作方式(加入网络方面): 注意:这不是由我编码的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的原始代码。请记住这一点。
这是密码加密的工作原理。