我到处搜索......我做到了!我在如何连接到C ++上的Wi-Fi时找不到任何示例。
我在MSDN上找到并尝试了WlanGetAvailableNetworkList()和WlanQueryInterface()的示例。我还在C#上找到了example我要搜索的内容。谁能告诉我一个 C ++ ?
编辑:我对C ++的互联网部分一无所知(服务器,Wifi API甚至没有太多的Win32 API),只是该语言的核心,我只想制作一个简单程序找到一个打开的连接,自动连接到它并在连接成功时播放声音。如果您能为我提供一些信息和链接,我会进行研究并发布我能找到的任何解决方案。
答案 0 :(得分:2)
鉴于代码不是提前类型,即不是那么好,但它可以完成工作。我在windows中使用了代码块。
#include <iostream>
#include<stdlib.h>
#include<fstream>
#include<string>
#include<conio.h>
using namespace std;
int main()
{
ofstream xmlFile;
ifstream xmlFile1;
string name="",pass="";
string ntyp="Wi-Fi",netType,fileTest=">test.txt",check,ntype,fil,xfileName,fileName="myWlan.xml";
char c='"',cho='2',cho1='1',c1;
netType=c+ntyp+c+fileTest;
xfileName=c+fileName+c;
int succ=0;
do
{
system("netsh wlan show networks");
cout<<" >-------------------- TO REFRESS PRESS :1 \n\n >-------------------- TO CHOOSE NETWORK PRESS : 2 \n\n > ";
cho=getch();
}while(cho!='2');
cout<<"\n Enter the desired network name-------: ";
cin>>name;
do
{
cout<<"\n Enter wifi Password------: ";
cin>>pass;
xmlFile.open(fileName.c_str());
//Writing a xml file .....................
xmlFile<<"<?xml version="<<c<<"1.0"<<c<<"?>\n";
xmlFile<<"<WLANProfile xmlns="<<c<<"http://www.microsoft.com/networking/WLAN/profile/v1"<<c<<">\n";
xmlFile<<"<name>";
xmlFile<<name;
xmlFile<<"</name>\n<SSIDConfig>\n<SSID>\n<hex>";
for(int i=0;i<name.length();i++)
xmlFile<<hex<<(int)name.at(i);
xmlFile<<"</hex>\n<name>";
xmlFile<<name;
xmlFile<<"</name>\n</SSID>\n</SSIDConfig>\n<connectionType>ESS</connectionType>\n<connectionMode>auto</connectionMode>\n<MSM>\n<security>\n<authEncryption>";
xmlFile<<"\n<authentication>WPA2PSK</authentication>\n<encryption>AES</encryption>\n<useOneX>false</useOneX>\n</authEncryption>\n<sharedKey>";
xmlFile<<"\n<keyType>passPhrase</keyType>\n<protected>false</protected>\n<keyMaterial>";
xmlFile<<pass;
xmlFile<<"</keyMaterial>\n</sharedKey>\n</security>\n</MSM>\n";
xmlFile<<"<MacRandomization xmlns="<<c<<"http://www.microsoft.com/networking/WLAN/profile/v3"<<c<<">\n";
xmlFile<<"<enableRandomization>false</enableRandomization>\n</MacRandomization>\n</WLANProfile>";
xmlFile.close();
//addd the xml file to system profile.............
system(("netsh wlan add profile filename="+xfileName).c_str());
//to let system realize what changes have been made...............
system("timeout /t 2");
//to check if connected...........
system(("netsh interface show interface name="+netType).c_str());
xmlFile1.open("test.txt");
while(!xmlFile1.eof())
{
xmlFile1>>c1;
if(c1==':')
{
for(int i=0;i<9;i++)
{
xmlFile1>>c1;
check=check+c1;
}
}
if(check=="Connected")
{
cout<<"...............................................You are connected!!.................................";
succ=1;break;
}
if(check!="Connected")check="";
}
xmlFile1.close();
if(succ==1)break;
}while(succ!=1);
return 0;
}
希望它能帮助....
答案 1 :(得分:1)
好的,我猜你正在寻找一个枚举函数,比如这个:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms706716%28v=vs.85%29.aspx
我猜你的意思是检查WLan状态是否正常。如果仔细观察,枚举函数将返回一个包含isState的结构,该结构就是其中之一:
typedef enum _WLAN_INTERFACE_STATE {
wlan_interface_state_not_ready = 0,
wlan_interface_state_connected = 1,
wlan_interface_state_ad_hoc_network_formed = 2,
wlan_interface_state_disconnecting = 3,
wlan_interface_state_disconnected = 4,
wlan_interface_state_associating = 5,
wlan_interface_state_discovering = 6,
wlan_interface_state_authenticating = 7
} WLAN_INTERFACE_STATE, *PWLAN_INTERFACE_STATE;
要实际“连接”,你需要让服务器在另一边听...虽然Renan也给了你一个很好的链接(参见问题的评论部分),但这需要你有一个SSID。这取决于您的软件是否确实知道Wifi SSID。