2013-09-02 5 views
6

Я искал везде ... Я сделал! Я просто не мог найти никакого примера на , как подключиться к Wi-Fi на C++.Подключение к Wi-Fi C++

Я нашел и попробовал примеры WlanGetAvailableNetworkList() и WlanQueryInterface() на MSDN. Я также нашел example того, что я ищу на C#. Может ли кто-нибудь сказать мне один за C++?

Edit: я не знаю ничего об интернет-части C++ (серверы, Wi-Fi интерфейсы даже не столько из Win32 API), только ядро ​​языка, я просто хочу, чтобы сделать простой программу, которая находит открытое соединение и автоматически подключается к нему и воспроизводит звук, если соединение было успешным. Если вы можете предоставить мне info и ссылки Я сделаю исследование и опубликую любое решение, которое я могу найти.

+0

Насколько вы обеспокоены, вы просто подключиться к серверу (или создать сервер для подключения). Как транспортируются пакеты, ни одна из ваших проблем. OS все равно позаботится об этом. –

+0

Я обновил свой пост. – Bonnev

+0

http://msdn.microsoft.com/en-us/library/windows/desktop/ms706613(v=vs.85).aspx –

ответ

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; 

Чтобы на самом деле «подключения» вам необходимо иметь сервер прослушивает другой стороны ... Хотя Ренан дал вам хорошая ссылка тоже (см. раздел комментариев вопроса), но это требует, чтобы у вас был SSID. Это зависит от того, действительно ли ваше программное обеспечение знает SSID Wi-Fi.

+0

До тех пор, пока я могу получить SSID с 'WlanGetAvailableNetworkList()', это не будет проблемой. Если вы говорите о ** скрытых **, я не буду с ними связываться. – Bonnev

1

Данный код не является заранее подготовленным, т. Е. Не так хорошо, но он выполняет свою работу. У меня есть код в окнах.

#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; 
} 

Надеюсь, это поможет ....

Смежные вопросы