Paprastas C++ žiniatinklio serveris

Paprastas C Ziniatinklio Serveris



Šiame straipsnyje mes sužinosime apie C++ žiniatinklio serverius. Pagrindinis žiniatinklio serverio tikslas yra apdoroti gaunamas HTTP užklausas, apdoroti visas ateinančias užklausas ir atsakyti su žiniatinklio HTML turiniu. Turime palaikyti žiniatinklio serverį C++ kalboje, tiesiog C++ aplinkoje pridedant tinklo bibliotekas, pvz., „sockets“, kad galėtume tvarkyti tinklo ryšius ir problemas. Žiniatinklio serveris yra interneto pagrindas ir yra komunikacijos tarp vartotojų ir pagrindinių serverių būdas. Įvertinkime paprasto žiniatinklio serverio kūrimo procesą naudodami tinkamus pavyzdžius.

Aplinkos nustatymas

Pirmiausia turime nustatyti visas reikalingas parinktis savo aplinkoje. Turime naudoti lizdus, ​​kad galėtume klausytis gaunamų HTTP užklausų. Po to mes prijungiame lizdą prie konkretaus pagrindinio kompiuterio prievado kaip mūsų sistemos. Po to, kai klientai skambina dėl užklausos, serveris išklauso šias gaunamas prijungtas užklausas. Serveris atsako į vartotojo užklausas per HTTP užklausas, kad vartotojo užklausa būtų pateikta serveriui. Po to serveris apdoroja užklausą ir tinkamai paruošdamas vartotojui grąžina HTTP atsakymus.







Žiniatinklio serverio lizdų tvarkymas

Šioje sesijoje sužinosime, kad lizdai sukuria ryšį tarp skirtingų procesų, kurie veikia mūsų sistemoje. Lizdai iš esmės naudojami ryšiui arba ryšiui tarp kliento naršyklės ir mūsų serverio sukurti. Lizdas jungiamas C++ taip, kaip nurodyta toliau:



Čia mes apibrėžsime lizdų bibliotekas kaip „#įtraukti “. Pagrindinėje funkcijoje mes sukuriame lizdą inicijuodami „server_fd“. Po to patikriname „server_fd“ reikšmę, kurioje yra akcijų ryšio patvirtinimas. Jei serveris neveikia ir neveikia gerai, jis grąžina arba parodo pranešimą „Socket sukurti nepavyko“. Kitu atveju žiniatinklio serverio IP adresą turinčiame pranešime bus rodomi žiniatinklio serverio HTML duomenys.



#include
#include
#include
tarp pagrindinis ( ) {
int serveris_fd = lizdas ( AF_INET, SOCK_STREAM, 0 ) ;
jeigu ( server_fd == - 1 ) {
std::cerr << „Nepavyko sukurti lizdo“ ;
grąžinti -1 ;
}
// Kitas
// {
// std::cout << 'išeiti' ;
// }
// įpareigoti
std::cout << 'http//:127.0.0.1:8080' ;
// Kitas kodas pateikiamas čia
grąžinti 0 ;
}


Šio kodo išvestis pridedama taip:






Tai rodo, kad lizdas sėkmingai sukurtas C++, kad būtų galima prisijungti prie žiniatinklio serverio.

Tinklo serverio tvarkymas C++

Sistemos žiniatinklio serveris nustatytas tvarkyti įvairias C++ sąvokas, pvz., sujungimo rūšiavimą, linijinį rūšiavimą ir kt. Nepamirškite inicijuoti svarbių tinklo bibliotekų. Žiniatinklio serveris veikia vietiniame kompiuteryje (127.0.0.1) ir klausosi 8080 prievado.



Į C++ programavimo kalbą įtraukite reikiamas bibliotekas taip:

# įtraukti < paskatinti / asio.hpp >


Atminkite, kad žiniatinklio serverio kūrimas naudojant C++ nėra lengvas ir daug laiko reikalaujantis procesas. Mes galime tvarkyti gaunamus ryšius naudodami „async_accept“.

Serverio atsakymai C++ kode žiniatinklio serveryje

Serverio atsakymas turi būti HTTP, kuris veikia naršyklėje ir rodo išvestį tinklalapio HTML rodinyje. Visos bibliotekos valdo serverius ir apdoroja visas galiojančias užklausas.

Žiniatinklio serverio įrišimas ir klausymas

Toliau turime žinoti apie žiniatinklio serverio susiejimą ir klausymą, kad kodą būtų galima lengvai vykdyti tinklalapyje. Po to turime susieti lizdą su nurodytu mūsų sistemos adresu, iš esmės IP adresu ir prievadu, kuriame šie lizdai yra aktyvūs. Uoste pradedame klausytis gaunamų ryšių.

Turime inicijuoti kelias bibliotekas, kurias reikia susieti ir susieti.

Sockaddr_in adresas;


Galime susieti serverį. Jei serveris neveikia arba neprisijungęs, pranešimas nerodomas jokios naršyklės tinklalapyje.

Ryšių su žiniatinklio serveriu priėmimas

Šiame skyriuje sužinosime, kaip galime kontroliuoti kliento užklausų srautą. Serveris priima visas kliento užklausas naudodamas HTTP protokolą. Serverio lizdas nurodo pranešimo, gauto žiniatinklio serveryje iš kliento, dydį. Pranešime yra aiškiau ir unikaliau nurodytas serverio lizdo ryšys ir adresas. Tikriname, ar serveris turi atsakyti, ar vartotojo lizdas rastas, ar ne. Jei vartotojo lizdo ryšys nerastas, negalime priimti ryšio su žiniatinklio serveriu.

Duomenų siuntimo ir gavimo iš vartotojo ir serverio pabaigos metodai

Sukūrus socket nuorodas ir priėmus ryšį, sekantis dalykas yra siųsti duomenis į serverio pusę ir gauti duomenis iš serverio naudojant skirtingus raktažodžius bei sukūrus funkcijas, kurios yra susijusios su duomenų siuntimu ir gavimu C++. Čia mes patikriname duomenų atsaką. Ar tai užklausa gauti duomenis ar paskelbti duomenis iš žiniatinklio serverio? Tikriname kliento užklausos atsakymo būseną. Laikinai saugome visas kliento užklausas buferyje, kad žiniatinklio serveryje būtų rodomas pranešimas arba išvestis.

Linijinis rūšiavimas C++

Atlikime linijinį rūšiavimą čia ir lengvai parodysime linijinio rūšiavimo rezultatą žiniatinklio serveryje. Linijinio rūšiavimo kodo fragmentas pridedamas taip:

#include
naudojant vardų erdvę std;
negalioja LinearSearch ( tarpt arr [ ] , int len, int item ) {
dėl ( tarpt i = 0 ;i < len;i++ ) {
jeigu ( arr [ i ] == prekė ) {
cout << daiktas << „Rasta indekse:“ << i;
grąžinti ;
}
}
cout << 'Nerastas' ;
}
tarp pagrindinis ( ) {
tarpt arr [ ] = { 10 , 5 , penkiolika , dvidešimt vienas ,- 3 , 7 } ;
int len ​​= dydisof ( arr ) / dydis ( arr [ 0 ] ) ;
int item = dvidešimt vienas ;
Linijinė paieška ( arr, len, prekė ) ;
grąžinti 0 ;
}


Šiame pavyzdyje mes ieškome elemento '21', kuriame indekse. Taigi, paleidžiame šį kodą. Šio kodo išvestis pridedama taip:


Ši išvestis dabar atidaryta žiniatinklio serveryje, kaip ir bet kurioje naršyklėje, pvz., „Chrome“, „Edge“ ir kt.

Nutraukite visas jungtis po išvesties ekrano

Tai paskutinis žingsnis tvarkant duomenis žiniatinklio serveryje. Atlikę reikiamą išvestį, nepamirškite uždaryti lizdų jungčių. Čia uždarome lizdą naudodami tokias funkcijas kaip „close (server_id)“ ir „close (kliento lizdas)“.

Pasibaigus serveriui, laukiama išvestis rodoma tinklalapyje, pasiekiant adresą kaip „http//localhost:8080“.

Išvada

Šio straipsnio pabaigoje galime pasakyti, kad paprastas žiniatinklio serverio valdymas C++ yra tikrai sudėtingas ir norint išsiųsti ir gauti HTTP kliento užklausą, reikia visiškai susikaupti. Galime išplėsti žiniatinklio serverio funkcijas, kad tinklalapio turinys būtų rodomas dinamiškai. Tikimės, kad šis straipsnis jums bus naudingas ir galite paleisti šiuos pavyzdžius savo aplinkoje, kad suprastumėte veiksmus, kurių reikia norint sukurti paprastą žiniatinklio serverį C++.