如果你们中的任何一个人熟悉Google的chromecast,我会尝试以类似的方式连接到网络。具体来说,我想在后台检查网络连接的守护进程,如果Raspi无法连接到网络,那么我希望它开始广播AdHoc网络并运行DHCP服务器。
然后,Raspi将通过网络收听有关wifi凭据的指令,并在收到它们后,将尝试连接。如果raspi成功连接或插入了以太网电缆,AdHoc / DHCPd将关闭并将使用新连接。
我是linux网络命令的新手,所以我想知道在设置这些连接时是否有错误。以下是相关的c ++脚本:
如果凭据已保存:
void NetworkConnectionMonitor::connectToRemeberedWifi()
{
system("wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf");
system("dhclient -1 wlan0");
}
特别连接:
void NetworkConnectionMonitor::startAdHoc()
{
system("ifconfig wlan0 down");
system("iwconfig wlan0 mode ad-hoc");
system("iwconfig wlan0 key aaaaa11111");
system("iwconfig wlan0 essid RPi");
system("ifconfig wlan0 10.0.0.200 netmask 255.255.255.0
system("/usr/sbin/dhcpd wlan0");
}
void NetworkConnectionMonitor::stopAdHoc()
{
system("service isc-dhcp-server stop");
system("ifconfig wlan0 down");
}
在调用stopAdHoc()
后收到新凭据时void NetworkConnectionMonitor::connectToWifi(string essid, string psk)
{
system("wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf");
system("wpa_cli add_network");
system("wpa_cli set_network 0 ssid " + essid);
system("wpa_cli set_network 0 psk " + psk);
system("wpa_cli enable_network 0");
system("wpa_cli save_config");
system("dhclient -1 wlan0");
}
如果网络出现故障,请在调用start ad hoc
之前调用此方法void NetworkConnectionMonitor::stopWifi()
{
system("wpa_cli terminate");
}
wpa_supplicant.conf(在添加凭据之前):
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
的/ etc /网络/接口
auto lo wlan0
iface lo inet loopback
allow-hotplug etho0
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet manual
我收到的错误太多,无法在此列出,但是adhoc似乎启动得很好,我可以连接到它并成功通过侦听端口发送数据包。但是,当我尝试切换到Wifi连接时,似乎dhclient和dhcpd之间仍存在一些冲突。
如果有更简单的方法,我很乐意听到它。如果没有人知道为什么这不起作用?