- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想使用 Wifi-Direct 连接两台设备。一个是装有 Linux 的个人电脑(在我的测试中,我使用的是 Linux Mint 17.2),另一个是 Android 智能手机(Android 4.3 的三星 Galaxy S3。没有 root,也不想 root)。
阅读互联网上的一些指南后,我决定在 Linux 中使用 wpa_supplicant 并为 Android 创建一个应用程序。这是我为 wpa_supplicant 找到的最佳指南之一: https://web.archive.org/web/20210114180304/https://processors.wiki.ti.com/index.php/OMAP_Wireless_Connectivity_NLCP_WiFi_Direct_Configuration_Scripts
当我运行 iw list 时,我看到“支持的接口(interface)模式:”允许 P2P_client 和 P2P_GO。我的 wpa_supplicant.conf 包含:
ctrl_interface=/var/run/wpa_supplicant
update_config=1
ap_scan=1
device_name=My-pc
device_type=1-0050F204-1
driver_param=use_p2p_group_interface=1
p2p_go_intent=15
p2p_go_ht40=1
它按预期工作。当我尝试使用两台 Android 设备时,它们可以看到对方并连接(显示 Wifi-Direct 图标)。
现在我正在尝试连接 Android 和 Linux,但我想我不太了解 wpa_supplicant 是如何工作的。我也看到这个问题和我问的很相似,但它并没有真正回答我的疑惑...... Direct Wifi Communication between android smartphone and other devices
我的问题是我无法理解如何在两个设备之间进行握手以及如何设置网络。
Wpa_supplicant 是我的问题。我跑:
sudo wpa_supplicant -wlan0 -Dnl80211 -c/etc/wpa_supplicant.conf
sudo wpa_cli
但是我遇到了很多问题:
所以我进入/usr/share/dbus-1/system-services 并移走了这两个文件
fi.epitest.hostap.WPASupplicant.service
fi.w1.wpa_supplicant1.service
现在可以了
sudo killall wpa_supplicant
它真的死了,在下一秒没有重新连接的情况下断开了我与 Wifi 的连接。现在我可以启动 wpa_supplicant,三个问题都解决了。
我进入 wpa_cli,启动“p2p_find”,同时在应用程序中启用搜索。
Android 和 Linux 现在可以看到对方。
P2P-DEVICE-FOUND 00:11:22:44:88:ff p2p_dev_addr=00:11:22:44:88:ff
pri_dev_type=10-0050F204-5 name='GT-I9300' config_methods=0x188
dev_capab=0x24 group_capab=0x0 vendor_elems=1 new=0
通过“p2p_peers”我可以看到手机MAC。
> aa:bb:cc:dd:ee:ff
这里我不能继续。我尝试了各种可能性,但都没有奏效。我的目标是让 Linux 成为组所有者。
看到我无法连接 Android/Linux,我尝试使用 Linux/Linux(Linux Mint 作为 GO,Ubuntu 作为客户端)进行一些练习,如第一个链接中的示例来自互联网。即使在这里我也有很多问题。
在 Mint 中我尝试
p2p_connect MAC_UBUNTU pin auth
在 Ubuntu 中我尝试
p2p_connect MAC_MINT PIN_GENERATED_BY_MINT
当我在 Mint 中编写 psp_connect 时,它会创建一个新接口(interface) p2p_wlan0 _0,并返回
P2P-DEVICE-LOST p2p_dev_addr=MAC_UBUNTU
然后从 Ubuntu 启动的 p2p_connect 失败。
问题2.1 为什么创建群组时会切换界面?
问题 2.2 处理这个变化的正确方法是什么?更改后我不能再 p2p_find Ubuntu(我必须等待一段时间或重新启动一切)
问题 2.3 Ubuntu 应该改变它的界面吗?
问题 2.3 在新界面中,我应该为 Ubuntu 和 Mint 设置 IP...我应该如何使用静态 IP 来设置?
问题 2.4 如果我想设置一个 DHCP 服务器和客户端?
问题 1.4 Android(客户端)/Linux(GO)?
最佳答案
我在这个问题上做了很多工作,这里是我找到的答案:
我希望 Linux 作为 GO,Android 作为客户端,所以在 Linux 中对我有用的是:
// Kill current supplicant and avoid its automatic recreation
system("mv /usr/share/dbus-1/system-services/fi.* .");
system("killall udhcpd");
system("wpa_cli -i wlan0 terminate -B");
usleep(300000);
// Start new supplicant
system("wpa_supplicant -Dnl80211 -iwlan0 -c /etc/p2p_supplicant.conf -B");
system("wpa_cli -iwlan0 p2p_group_add");
system("ifconfig p2p-wlan0-0 192.168.1.2");
// Connect with a peer
for (;;) {
system("wpa_cli -ip2p-wlan0-0 wps_pbc");
system("udhcpd /etc/udhcpd.conf");
// Here start your TCP server on a port
Server server([port]);
server.startServer();
}
注意要破坏 P2P 连接并重新启动正常连接,我使用此脚本:
#!/bin/bash
wpa_cli -i wlan0 terminate -B
wpa_cli -i p2p-wlan0-0 terminate -B
cp ./fi.* /usr/share/dbus-1/system-services/
service network-manager restart
此处服务器监听连接,android 客户端连接到它。我使用了在第一个网站上找到的一个非常简单的 TCP 服务器,它运行起来非常棒。启动 udhcpd 很重要,否则您将不会在 Android 中获得“已连接”图标。对于 Android 方面,我遵循了我在 http://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html 上看到的内容。而且效果很好。
回答 1.2 从 wpa_cli 你可以得到很多不同的警告和错误。我看到只要调用该函数(就像我在前面的代码 fragment 中所做的那样)就可以使一切正常运行,尽管有警告。我忽略了他们。
答案 1.3 使用 PIN 的连接有效,当我尝试它时我没有启动 udhcpd 并且每次都使我的连接崩溃。这不是由于 PIN 或 PBC。
回答2.1 服务端和客户端都在切换界面。这与您通常使用套接字所做的行为非常相似。您创建一个监听套接字,有人连接,您创建一个新的套接字来在单独的线程中处理该客户端,同时监听套接字仍然存在,等待其他用户。你对接口(interface)做同样的事情。启动一个监视 wlan0 接口(interface)的 wpa_cli 和一个监视 p2p-wlan0-0 接口(interface)的 wpa_cli 可以很好地了解更改期间发生的情况。
答案 2.2 客户端“转到”另一个接口(interface),现在准备好接收 IP。启动 DHCP 和 TCP 服务器!
回答 2.3 不要使用静态 IP。仅对服务器有效,客户端应使用 DHCP IP。也许有一种方法可以处理静态 IP,但它对我的目标没有用。
回答 2.4 完成。一直以来都是这个问题
回答 1.4 即使在 Android/linux 上也能完美运行。
很抱歉,如果我在回答中犯了一些错误,我仍然没有了解 WiFi-Direct 连接的全貌,我只是希望这可以帮助其他人。
关于android - 如何在 Android 和 Linux 之间设置 Wifi-Direct 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31877144/
我需要修复 getLineNumberFor 方法,以便如果 lastName 的第一个字符位于 A 和 M 之间,则返回 1;如果它位于 N 和 Z 之间,则返回 2。 在我看来听起来很简单,但我不
您好,感谢您的帮助!我有这个: 0 我必须在每次点击后增加“pinli
Javascript 中是否有一种方法可以在不使用 if 语句的情况下通过 switch case 结构将一个整数与另一个整数进行比较? 例如。 switch(integer) { case
我有一列是“日期”类型的。如何在自定义选项中使用“之间”选项? 最佳答案 请注意,您有2个盒子。 between(在SQL中)包含所有内容,因此将框1设置为:DATE >= startdate,将框2
我有一个表,其中包含年、月和一些数字列 Year Month Total 2011 10 100 2011 11 150 2011 12 100 20
这个问题已经有答案了: Extract a substring between double quotes with regular expression in Java (2 个回答) how to
我有一个带有类别的边栏。正如你在这里看到的:http://kees.een-site-bouwen.nl/ url 中类别的 ID。带有 uri 段(3)当您单击其中一个类别时,例如网页设计。显示了一
这个问题在这里已经有了答案: My regex is matching too much. How do I make it stop? [duplicate] (5 个答案) 关闭 4 年前。 我
我很不会写正则表达式。 我正在尝试获取括号“()”之间的值。像下面这样的东西...... $a = "POLYGON((1 1,2 2,3 3,1 1))"; preg_match_all("/\((
我必须添加一个叠加层 (ImageView),以便它稍微移动到包含布局的左边界的左侧。 执行此操作的最佳方法是什么? 尝试了一些简单的方法,比如将 ImageView 放在布局中并使用负边距 andr
Rx 中是否有一些扩展方法来完成下面的场景? 我有一个开始泵送的值(绿色圆圈)和其他停止泵送的值(簧片圆圈),蓝色圆圈应该是预期值,我不希望这个命令被取消并重新创建(即“TakeUntil”和“Ski
我有一个看起来像这样的数据框(Dataframe X): id number found 1 5225 NA 2 2222 NA 3 3121 NA 我有另一个看起来
所以,我正在尝试制作正则表达式,它将解析存储在对象中的所有全局函数声明,例如,像这样 const a = () => {} 我做了这样的事情: /(?:const|let|var)\s*([A-z0-
我正在尝试从 Intellivision 重新创建 Astro-Smash,我想让桶保持在两个 Angular 之间。我只是想不出在哪里以及如何让这个东西停留在两者之间。 我已经以各种方式交换了函数,
到处检查但找不到答案。 我有这个页面,我使用 INNER JOIN 将两个表连接在一起,获取它们的值并显示它们。我有这个表格,用来获取变量(例如开始日期、结束日期和卡号),这些变量将作为从表中调用值的
我陷入了两个不同的问题/错误之间,无法想出一个合适的解决方案。任何帮助将不胜感激 上下文、FFI 和调用大量 C 函数,并将 C 类型包装在 rust 结构中。 第一个问题是ICE: this pat
我在 MySQL 中有一个用户列表,在订阅时,时间戳是使用 CURRENT_TIMESTAMP 在数据库中设置的。 现在我想从此表中选择订阅日期介于第 X 天和第 Y 天之间的表我尝试了几个查询,但不
我的输入是开始日期和结束日期。我想检查它是在 12 月 1 日到 3 月 31 日之间。(年份可以更改,并且只有在此期间内或之外的日期)。 到目前为止,我还没有找到任何关于 Joda-time 的解决
我正在努力了解线程与 CPU 使用率的关系。有很多关于线程与多处理的讨论(一个很好的概述是 this answer )所以我决定通过在运行 Windows 10、Python 3.4 的 8 CPU
我正在尝试编写 PHP 代码来循环遍历数组以创建 HTML 表格。我一直在尝试做类似的事情: fetchAll(PDO::FETCH_ASSOC); ?>
我是一名优秀的程序员,十分优秀!