Eenvoudige C++-webserver

Eenvoudige C Webserver



In dit artikel leren we over webservers in C++. Het belangrijkste doel van de webserver is het afhandelen van de binnenkomende HTTP-verzoeken, het verwerken van alle komende verzoeken en het reageren met de web-HTML-inhoud in ruil daarvoor. We moeten de webserver in C++ onderhouden door simpelweg de netwerkbibliotheken in de C++-omgeving toe te voegen, zoals “sockets”, om de netwerkcommunicatie en -problemen af ​​te handelen. Een webserver is de ruggengraat van het internet en is een manier van communicatie tussen gebruikers en hoofdservers. Laten we het proces van het maken van een eenvoudige webserver evalueren aan de hand van goede voorbeeldimplementaties.

De omgeving instellen

We moeten eerst alle benodigde opties in onze omgeving instellen. We moeten de sockets gebruiken om naar de binnenkomende HTTP-verzoeken te luisteren. Daarna binden we de socket aan de specifieke poort op de hostmachine als ons systeem. Daarna, wanneer de clients om het verzoek vragen, luistert de server naar deze binnenkomende verbonden verzoeken. De server reageert op de verzoeken van de gebruiker via HTTP-verzoeken om het verzoek van de gebruiker naar de server op te halen. Daarna verwerkt de server het verzoek en retourneert de HTTP-antwoorden naar de gebruiker met de juiste verwerking.







Sockets-afhandeling van de webserver

In deze sessie zullen we leren dat sockets communicatie creëren tussen verschillende processen die in ons systeem draaien. De sockets worden in principe gebruikt om de communicatie of verbinding tussen de browser van de klant en onze server tot stand te brengen. De aansluiting van de socket is in C++ gebouwd op de manier zoals hieronder vermeld:



Hier zullen we de bibliotheken voor sockets definiëren als “#include ”. In de hoofdfunctie maken we de socket door de “server_fd” te initialiseren. Daarna controleren we de waarde van de “server_fd” die de stockverbindingsvalidatie bevat. Als de server niet beschikbaar is en niet goed werkt, wordt het bericht 'Socket maken mislukt' geretourneerd of weergegeven. Anders zal het bericht met het IP-adres van de webserver de HTML-gegevens op de webserver weergeven.



#include
#include
#include
int. hoofd ( ) {
int server_fd = socket ( AF_INET, SOCK_STREAM, 0 ) ;
als ( server_fd == - 1 ) {
std::cerr << 'Aanmaken socket mislukt' ;
opbrengst -1 ;
}
// anders
// {
// std::uit << 'Uitgang' ;
// }
// binden
std::uit << 'http//:127.0.0.1:8080' ;
// Verdere code komt hier
opbrengst 0 ;
}


De uitvoer van deze code is als volgt bijgevoegd:






Dit laat zien dat de socket met succes is aangemaakt in C++ om verbinding te maken met de webserver.

Webserverafhandeling in C++

De webserver van het systeem is ingesteld om de verschillende C++-concepten te verwerken, zoals samenvoegsortering, lineaire sortering, enz. Vergeet niet de belangrijke netwerkbibliotheken te initialiseren. De webserver draait op de lokale machine (127.0.0.1) en luistert op poort 8080.



Neem de benodigde bibliotheken als volgt op in de programmeertaal C++:

# erbij betrekken < boost / asio.hpp >


Houd er rekening mee dat het maken van een webserver in C++ geen eenvoudig en tijdrovend proces is. We kunnen de inkomende verbindingen afhandelen met behulp van “async_accept”.

Serverreacties in de C++-code op de webserver

Het serverantwoord moet HTTP zijn. Dit werkt in de browser en toont de uitvoer in de HTML-weergave op de webpagina. Alle bibliotheken beheren de servers en behandelen alle geldige aanvragen.

Binden en luisteren van de webserver

Vervolgens moeten we meer weten over het binden en luisteren van de webserver om de code eenvoudig op de webpagina uit te voeren. Daarna moeten we de socket koppelen aan het opgegeven adres van ons systeem, in feite het IP-adres en de poort waarop deze sockets actief zijn. Op de haven luisteren we naar inkomende verbindingen.

We moeten de weinige bibliotheken initialiseren die we willen binden en koppelen.

Sockaddr_in-adres;


We kunnen de server binden. Als de server niet beschikbaar is of geen verbinding heeft, wordt het bericht niet weergegeven op de webpagina van welke browser dan ook.

De verbindingen met de webserver accepteren

In dit gedeelte leren we hoe we de stroom van de verzoeken van de klant kunnen controleren. De server accepteert alle clientverzoeken via het HTTP-protocol. De server socket geeft de grootte aan van het bericht dat van de client op de webserver wordt ontvangen. Het bericht bevat de server-socketverbinding en het adres duidelijker en unieker. We controleren of de server moet reageren als de gebruikerssocket wordt gevonden of niet. Als de gebruikerssocketverbinding niet wordt gevonden, kunnen we de verbinding met een webserver niet accepteren.

Methoden voor het verzenden en ontvangen van de gegevens van de gebruiker en de server

Na het maken van de socketkoppelingen en het accepteren van de verbinding, is het volgende dat u moet doen om de gegevens naar de serverkant te sturen en de gegevens van de server te ontvangen met behulp van verschillende trefwoorden en om de functies te bouwen die verband houden met het verzenden en ontvangen van de gegevens in C++. Hier controleren we de reactie van de gegevens. Is dit een verzoek om de gegevens op te halen of om de gegevens van de webserver te POSTen? We controleren de reactiestatus van het verzoek van de klant. We slaan tijdelijk alle clientverzoeken op in de buffer om het bericht of de uitvoer op de webserver weer te geven.

Lineair sorteren in C++

Laten we hier de lineaire sortering uitvoeren en het resultaat van de lineaire sortering eenvoudig op de webserver weergeven. Het codefragment van de lineaire sortering is als volgt bijgevoegd:

#include
namespace std; gebruiken;
ongeldig Lineair zoeken ( int arr [ ] , int len, int item ) {
voor ( int i = 0 ;i < len;i++ ) {
als ( arr [ i ] == artikel ) {
uit << item << ' Gevonden bij index: ' << i;
opbrengst ;
}
}
uit << 'Niet gevonden' ;
}
int. hoofd ( ) {
int arr [ ] = { 10 , 5 , vijftien , eenentwintig , - 3 , 7 } ;
int len ​​= groottevan ( arr ) / De grootte van ( arr [ 0 ] ) ;
int-item = eenentwintig ;
Lineair zoeken ( arr, len, item ) ;
opbrengst 0 ;
}


In dit voorbeeld zoeken we naar het item “21” bij welke index. Dus we voeren deze code uit. De uitvoer van deze code is als volgt bijgevoegd:


Deze uitvoer is nu geopend op de webserver, zoals in elke browser zoals Chrome, Edge, enz.

Beëindig alle verbindingen na het uitvoerdisplay

Dit is de laatste stap bij het verwerken van de gegevens op een webserver. Vergeet niet om de socketverbindingen te sluiten nadat u de vereiste uitvoer hebt uitgevoerd. We sluiten de socket hier met behulp van functies zoals “close(server_id)” en “close (client socket)”.

Aan het einde van het draaien van de server wordt de verwachte uitvoer weergegeven op de webpagina door het adres te openen als “http//localhost:8080”.

Conclusie

Aan het einde van dit artikel kunnen we zeggen dat de eenvoudige webserverbediening in C++ erg complex is en volledige concentratie vereist om het verzoek van de HTTP-client te verzenden en te ontvangen. We kunnen de webserverfunctionaliteit uitbreiden om de inhoud dynamisch op de webpagina weer te geven. Hopelijk is dit artikel nuttig voor u en kunt u deze voorbeelden in uw omgeving uitvoeren om de stappen te begrijpen die nodig zijn om een ​​eenvoudige webserver in C++ te maken.