(C++) SpaceSockets2 ile internete bağlanabilen uygulamalar yapalım! - Bölüm 1

Selamlar herkese!

Bu yazımda sizlere SpaceSockets2 kullanarak internete bağlanabilen uygulamalar yapmayı göstereceğim.

SpaceSockets2 nedir?

SpaceSockets2, açık kaynaklı bir ağ kütüphanesidir. TCP, UDP ve ICMP protokollerini desteklemektedir.

SpaceSockets2 GitHub linki.

Neden SpaceSockets2?

Klasik soket programlama, çok zahmetli ve çapraz-platform için uygun değil. SpaceSockets2 Windows'a port edildiği zaman, yazdığımız bu uygulamaları da Windows altında derleyebileceksiniz, böylece uygulamanız çapraz-platform desteğine sahip olacak.

Yazıyı okumaya başlamadan önce...

Bu yazıyı okumaya başlamadan önce TCP protokolünün ne olduğunu, nasıl çalıştığını ve UDP protokolünün ne olduğunu ve nasıl çalıştığını öğrenmenizde fayda var.

Öyleyse, başlayalım!

İlk böllümde yazacağımız ilk uygulama, sunucu-istemci arasında bir "chat" programı olsun. Ve bu uygulamamız için TCP protokolünü kullanalım.

Sunucu uygulamamızın algoritması şu şekilde olacak:
  • İlk olarak SpaceSockets2'ye sunucu uygulaması yaptığımızın bilgisini verip, TCP sunucumuz için gereken ayarları yapmasını sağlayacağız.
  • Daha sonra soketimizi dinleyeceğiz.
  • Eğer soket dinlemesi sonucu, istemcimizin bağlandığını algılar isek, bağlantıyı onaylayacağız.
  • Bağlantıyı onayladıktan sonra da mesaj alış-verişini başlatacağız.
İstemci uygulamamız ise şöyle bir algoritmaya sahip olacak:
  • Kendine bir soket açacak.
  • Bizim sunucumuzun olduğu port ve IP numaralarından bağlanacak.
  • Sunucumuz istemciyi kabul edecek.
  • Sunucu ile mesaj alış-verişi yapacak.
Haydi kod yazalım!

Sunucu uygulaması
C++:
/*

Sunucu uygulamamız.

GitHub'tan indirmiş olduğunuz SpaceSockets2 ve uygulamalarının bulunduğu klasörden (veya .zip dosyasından)
"spacesockets2" klasörünü, bu kodun duracağı klasöre koyun.

Veya direkt olarak SpaceSockets2 projesinin içindeki "example" klasörü altında bu kodu görebilirsiniz.

*/
#include "spacesockets2/SpaceSockets2.hpp"

int main(){
   
        SpaceSockets2::tcp tcp_server("127.0.0.1",999999,SERVER_TCP,WRITE_TO_FILE | WRITE_TO_TERMINAL); //127.0.0.1 deme sebebim, bu örneği localhost üzerinde gerçekleştireceğiz. Bu yüzden de 127.0.0.1 adresini kullandım. Bağlantı limiti olarak 999999 kullandım, hayli büyük bir sayı. Ve sunucu oluşturduğumu da belirttim.

   

    char message[140] = "hello world!\n\n"; //SMS limiti. :P

         
          if(!tcp_server.tcp_listen(tcp_server.get_socket_fd())){ //Eğer port dinlemesi başarılıysa, SpaceSockets2, değer olarak 0 döndürüyor. Eğer başarısız ise log olarak yazıyor.

              std::cout<<"Port "<<tcp_server.get_port_number()<<" portunu dinliyorum."<<std::endl;

          }
          int accept_fd = tcp_server.tcp_accept_connection(); //Gelen bir bağlantı olursa kabul ediyor. Bağlantı kabul edildikten sonra yeni bir soket oluşuyor.
         
          while(1){
            tcp_server.tcp_send_data(message,accept_fd); //Yeni soket üzerinden veri gönderiyor.  
          }
         
             
    return 0;
}

İstemci uygulaması

C++:
/*

İstemci uygulaması.

*/
#include "spacesockets2/SpaceSockets2.hpp"

int main(){
        char recv_buffer[100];
        SpaceSockets2::tcp tcp_client("127.0.0.1",999999,CLIENT_TCP,NO_DEBUG_INFORMATION); //Burada 127.0.0.1 deme sebebim ise, lokal IP adresinde soket kuracağımız için. "NO_DEBUG_INFORMATION" modunda, yani istemci uygulamamız, SpaceSockets2 loglarını tutmayacak.

        if(!tcp_client.connect_to_a_server("127.0.0.1")){ //Sunucuya bağlanıyoruz...

            std::cout<<"Baglanildi!"<<std::endl;
           

        }
        else{

            std::cout<<"Baglanti bekleniyor!"<<std::endl;


        }

        while(1){

            bzero(recv_buffer,100); //Bug önlemek adına "buffer temizliği" :P
            if(!tcp_client.tcp_receive_data(recv_buffer,tcp_client.get_socket_fd())){ //Veri alıyoruz...
                if(strlen(recv_buffer) > 0){

                    std::cout<<"Sunucu: "<<recv_buffer<<std::endl;
                    bzero(recv_buffer,100);
                }
               

            }



        }
       


    return 0;
}

Ve önce sunucu programımızı, sonra da istemci programımızı çalıştıralım.
example.png


Ta-da! Gördüğünüz gibi, sunucumuz, istemcimize mesaj göndermekte. SpaceSockets2 log mesajlarını hem terminale hem de dosyaya yazdığımız için de soldaki terminalde de bir adet SpaceSockets2 log mesajı görmekteyiz.

Yorumlar

Gösterilecek yorum bulunamadı.

Blog girdisi detayları

Ekleyen
TerabyteForever
Okuma süresi
2 dakika okuma
Görüntüleme
347
Son güncelleme

Yazılım kategorisindeki diğer girdiler

TerabyteForever adlı kullanıcının diğer girdileri

Bu girdiyi paylaş

Geri
Yukarı