Basit C++ Web Sunucusu

Basit C Web Sunucusu



Bu yazımızda C++'daki web sunucularını öğreneceğiz. Web sunucusunun temel amacı, gelen HTTP isteklerini işlemek, gelen tüm istekleri işlemek ve karşılığında web HTML içeriğiyle yanıt vermektir. Ağ iletişimlerini ve sorunlarını ele almak için C++ ortamına 'soketler' gibi ağ kitaplıklarını ekleyerek web sunucusunu C++'da tutmamız gerekiyor. Web sunucusu internetin omurgasıdır ve kullanıcılar ile ana sunucular arasında bir iletişim yoludur. Basit bir web sunucusu oluşturma sürecini uygun örnek uygulamalarla değerlendirelim.

Ortamın Ayarlanması

Öncelikle ortamımızda gerekli tüm seçenekleri ayarlamamız gerekiyor. Gelen HTTP isteklerini dinlemek için soketleri kullanmamız gerekiyor. Bundan sonra, sistemimiz olarak soketi ana makinedeki belirli porta bağlarız. Bundan sonra istemciler istek için çağrı yaptığında sunucu bu gelen bağlı istekleri dinler. Sunucu, kullanıcının isteğini sunucuya getirmek için HTTP istekleri aracılığıyla kullanıcının isteklerine yanıt verir. Bundan sonra, sunucu isteği işler ve HTTP yanıtlarını uygun şekilde hazırlanmış şekilde kullanıcıya döndürür.







Web Sunucusunun Soket Kullanımı

Bu oturumda soketlerin sistemimizde çalışan farklı süreçler arasında iletişim oluşturduğunu öğreneceğiz. Soketler temel olarak müşterinin tarayıcısı ile sunucumuz arasında iletişim veya bağlantı oluşturmak için kullanılır. Soketin bağlantısı C++'da aşağıda belirtildiği şekilde oluşturulmuştur:



Burada soketlere ait kütüphaneleri “#include ” olarak tanımlayacağız. Ana fonksiyonda “server_fd”yi başlatarak soketi oluşturuyoruz. Daha sonra stok bağlantı doğrulamasını içeren “server_fd” değerini kontrol ediyoruz. Sunucu kapalıysa ve düzgün çalışmıyorsa, 'Soket oluşturma başarısız oldu' mesajını döndürür veya görüntüler. Aksi takdirde, web sunucusunun IP adresini içeren mesaj, web sunucusundaki HTML verilerini gösterecektir.



#include
#include
#include
int ana ( ) {
int sunucu_fd = soket ( AF_INET, SOCK_STREAM, 0 ) ;
eğer ( sunucu_fd == - 1 ) {
std::cerr << 'Soket oluşturma başarısız oldu' ;
geri dönmek -1 ;
}
// başka
// {
// std::cout << 'çıkış' ;
// }
// bağlamak
std::cout << 'http//:127.0.0.1:8080' ;
// Daha fazla kod buraya gelecek
geri dönmek 0 ;
}


Bu kodun çıktısı aşağıdaki dosyaya eklenmiştir:






Bu, web sunucusuna bağlanmak için C++'da soketin başarıyla oluşturulduğunu gösterir.

C++'da Web Sunucusunun Kullanımı

Sistemin web sunucusu, birleştirme sıralaması, doğrusal sıralama vb. gibi farklı C++ kavramlarını işleyecek şekilde ayarlanmıştır. Önemli ağ kitaplıklarını başlatmayı unutmayın. Web sunucusu yerel makinede (127.0.0.1) çalışır ve 8080 numaralı bağlantı noktasını dinler.



Gerekli kütüphaneleri C++ programlama diline aşağıdaki gibi ekleyin:

# katmak < artırmak / asio.hpp >


C++'da bir web sunucusu oluşturmanın kolay ve zaman alıcı bir süreç olmadığını unutmayın. Gelen bağlantıları “async_accept” kullanarak halledebiliriz.

Web Sunucusundaki C++ Kodundaki Sunucu Yanıtları

Sunucu yanıtı, tarayıcıda çalışan ve çıktıyı web sayfasındaki HTML görünümünde gösteren HTTP olmalıdır. Tüm kütüphaneler sunucuları yönetir ve tüm geçerli istekleri yerine getirir.

Web Sunucusunun Bağlanması ve Dinlenmesi

Daha sonra, kodu web sayfasında kolayca çalıştırabilmek için web sunucusunun bağlanması ve dinlenmesi hakkında bilgi sahibi olmamız gerekir. Bundan sonra soketi sistemimizde verilen adrese yani temel olarak bu soketlerin aktif olduğu IP adresine ve porta bağlamamız gerekiyor. Bağlantı noktasında gelen bağlantıları dinlemeye başlıyoruz.

Bağlanmak ve bağlantı kurmak için birkaç kütüphaneyi başlatmamız gerekiyor.

Sockaddr_in adresi;


Sunucuyu bağlayabiliriz. Sunucu kapalıysa veya bağlı değilse, mesaj herhangi bir tarayıcının web sayfasında görüntülenmez.

Web Sunucusuna Bağlantıları Kabul Etme

Bu bölümde istemcinin isteklerinin akışını nasıl kontrol edebileceğimizi öğreneceğiz. Sunucu, tüm istemci isteklerini HTTP protokolü aracılığıyla kabul eder. Sunucu soketi, istemciden web sunucusuna alınan mesajın boyutunu belirtir. Mesaj, sunucu soket bağlantısını ve adresini daha net ve benzersiz bir şekilde içerir. Kullanıcı soketinin bulunup bulunmadığı durumunda sunucunun yanıt vermesi gerekip gerekmediğini kontrol ediyoruz. Kullanıcı soket bağlantısı bulunamazsa web sunucusuna bağlantıyı kabul edemeyiz.

Kullanıcı ve Sunucu Tarafından Veri Gönderme ve Alma Yöntemleri

Soket bağlantılarını oluşturup bağlantıyı kabul ettikten sonra sıra, sunucu tarafına veri göndermek ve farklı anahtar kelimeler kullanarak sunucudan veri almak ve C++'da veri gönderme ve alma ile ilgili fonksiyonları oluşturmaktır. Burada verilerin yanıtını kontrol ediyoruz. Bu istek verileri almak için mi yoksa verileri web sunucusundan POST etmek için mi? Müşterinin talebinin yanıt durumunu kontrol ediyoruz. Mesajı veya çıktıyı web sunucusunda görüntülemek için tüm istemci isteklerini geçici olarak arabellekte saklarız.

C++'da Doğrusal Sıralama

Burada doğrusal sıralamayı yapalım ve doğrusal sıralamanın sonucunu web sunucusunda kolayca görüntüleyelim. Doğrusal sıralamanın kod pasajı aşağıya eklenmiştir:

#include
ad alanı std'sini kullanma;
geçersiz Doğrusal Arama ( dahili dizi [ ] , int len, int öğesi ) {
için ( int Ben = 0 ;Ben < uzun;i++ ) {
eğer ( varış [ Ben ] == öğe ) {
cout << öğe << ' Dizinde bulundu : ' << Ben;
geri dönmek ;
}
}
cout << 'Bulunamadı' ;
}
int ana ( ) {
dahili dizi [ ] = { 10 , 5 , on beş , yirmi bir , - 3 , 7 } ;
int len ​​= sizeof ( varış ) / boyutu ( varış [ 0 ] ) ;
int öğe = yirmi bir ;
Doğrusal Arama ( varış, len, öğe ) ;
geri dönmek 0 ;
}


Bu örnekte “21” maddesini hangi indekste arayacağız. Yani bu kodu çalıştırıyoruz. Bu kodun çıktısı aşağıdaki dosyaya eklenmiştir:


Bu çıktı artık Chrome, Edge vb. herhangi bir tarayıcıda olduğu gibi web sunucusunda da açıktır.

Çıkış Ekranından Sonra Tüm Bağlantıları Sonlandırın

Bu, bir web sunucusundaki verileri işlemenin son adımıdır. Gerekli çıkışı gerçekleştirdikten sonra soket bağlantılarını kapatmayı unutmayın. Burada “close(server_id)” ve “close(client Socket)” gibi fonksiyonları kullanarak soketi kapatıyoruz.

Sunucunun çalıştırılması sonunda “http//localhost:8080” adresine erişilerek web sayfasında beklenen çıktı görüntülenir.

Çözüm

Bu makalenin sonunda, C++'daki basit web sunucusu kullanımının gerçekten karmaşık olduğunu ve HTTP istemcisinin isteğini gönderip almak için tam konsantrasyon gerektirdiğini söyleyebiliriz. İçeriği web sayfasında dinamik olarak görüntülemek için web sunucusunun işlevselliğini genişletebiliriz. Umarız bu makale sizin için yararlı olur ve C++'da basit bir web sunucusu oluşturmak için gereken adımları anlamak için bu örnekleri ortamınızda çalıştırabilirsiniz.