Selamlar herkese!
Bu yazıda ilk bölümde yaptığımız mesajlaşma uygulamasını UDP ile yapacağız.
UDP protokolü; oyun, video konferans uygulamaları gibi, bağlantı sırasında 1-2 paket kopsa da hayati derecede önemi olmayacak uygulamalarda genelde kullanılır, çünkü UDP protokolü paketlerin gidip gitmediğini doğrulamaz. UDP hakkındaki yazımı okumanızı tavsiye ederim.
Başlamadan önce
İndirmediyseniz, SpaceSockets2 kütüphanesini GitHub üzerinden indirebilirsiniz. SpaceSockets2 GitHub linki.
Yazacağımız uygulamaların çalışma mantığı
Paketlerin gidip gitmediğini doğrulamayan, yani "datagram" protokollerde ağ tabanlı uygulamalar yapmak daha basittir. Sunucu ve istemci uygulamalarında da sadece soketi açarsınız ve mesaj gönderip alırsınız.
Kod kısmı
Hazırsak kod yazmaya başlayalım.
Öncelikle, SpaceSockets2 kullanan bir "iskelet UDP istemci programı" yazalım.
Daha sonra, bu iskelet programımıza başka özellikler ekleyelim. Tek başına iskelet uygulama bir işe yaramayacaktır.
Şimdi de bir sunucu uygulaması yapalım.
Yukarıdaki iskelet uygulamamız sunucu için de geçerli olduğundan dolayı bir adet daha iskelet uygulama koymayacağım.
İki programı da derleyip çalıştırdığımızda ise, şöyle bir çıktı almaktayız:
Görüldüğü üzere, uygulamalarımız UDP ile haberleşiyor. Bir de Wireshark üzerinden izleyelim bakalım.
Evet, iki uygulamamız da birbirine UDP mesajları yolluyor. Port belirtmediğimiz için de 8080 portu üzerinden yolluyor.
Bir dahaki yazıda görüşmek üzere, takipte kalın!
Bu yazıda ilk bölümde yaptığımız mesajlaşma uygulamasını UDP ile yapacağız.
UDP protokolü; oyun, video konferans uygulamaları gibi, bağlantı sırasında 1-2 paket kopsa da hayati derecede önemi olmayacak uygulamalarda genelde kullanılır, çünkü UDP protokolü paketlerin gidip gitmediğini doğrulamaz. UDP hakkındaki yazımı okumanızı tavsiye ederim.
Başlamadan önce
İndirmediyseniz, SpaceSockets2 kütüphanesini GitHub üzerinden indirebilirsiniz. SpaceSockets2 GitHub linki.
Yazacağımız uygulamaların çalışma mantığı
Paketlerin gidip gitmediğini doğrulamayan, yani "datagram" protokollerde ağ tabanlı uygulamalar yapmak daha basittir. Sunucu ve istemci uygulamalarında da sadece soketi açarsınız ve mesaj gönderip alırsınız.
Kod kısmı
Hazırsak kod yazmaya başlayalım.
Öncelikle, SpaceSockets2 kullanan bir "iskelet UDP istemci programı" yazalım.
C++:
#include "SpaceSockets2.hpp" //SpaceSockets2 neredeyse, bu komutu oraya göre düzenleyin.
int main(){
SpaceSockets2::udp udp_client("",WRITE_TO_FILE | WRITE_TO_TERMINAL);
/*Burada, SpaceSockets2'nin UDP sınıfını kullanacağız. IP adresi alanını boş bırakmamız, bizlere
bu programın "127.0.0.1" üzerinden, yani kendi bilgisayarımız üzerinden çalışacağını belirtir.
WRITE_TO_FILE ve WRITE_TO_TERMINAL değerleri ise hata ayıklama bilgileri için flag'lardır. İsteğe
bağlı olarak NO_DEBUG_INFORMATION flag'ı ile hata ayıklama bilgisi tutmayabilirsiniz.
*/
return 0;
}
Daha sonra, bu iskelet programımıza başka özellikler ekleyelim. Tek başına iskelet uygulama bir işe yaramayacaktır.
C++:
#include "SpaceSockets2.hpp" //SpaceSockets2 neredeyse, bu komutu oraya göre düzenleyin.
int main(){
SpaceSockets2::udp udp_client("",WRITE_TO_FILE | WRITE_TO_TERMINAL);
/*Burada, SpaceSockets2'nin UDP sınıfını kullanacağız. IP adresi alanını boş bırakmamız, bizlere
bu programın "127.0.0.1" üzerinden, yani kendi bilgisayarımız üzerinden çalışacağını belirtir.
WRITE_TO_FILE ve WRITE_TO_TERMINAL değerleri ise hata ayıklama bilgileri için flag'lardır. İsteğe
bağlı olarak NO_DEBUG_INFORMATION flag'ı ile hata ayıklama bilgisi tutmayabilirsiniz.
*/
char message_buffer[1000]; //1000 karaktere kadar olan mesajlar, bu tamponda saklanacaktır.
while(1){ //Sonsuz döngü.
if(!udp_client.receive_udp_package(message_buffer)){ //Buffer'ın içine mesajlarımızı alacağız. Eğer bu fonksiyon 0 (sıfır) döndürürse işlemin başarılı olduğu anlamına gelmekte.
std::cout<<"Server diyor ki : "<<message_buffer<<std::endl; //Eğer paket geldi ise mesajı göster.
}
}
return 0;
}
Şimdi de bir sunucu uygulaması yapalım.
Yukarıdaki iskelet uygulamamız sunucu için de geçerli olduğundan dolayı bir adet daha iskelet uygulama koymayacağım.
C++:
#include "SpaceSockets2.hpp"
int main(){
SpaceSockets2::udp udp_server("127.0.0.1",WRITE_TO_FILE | WRITE_TO_TERMINAL); //localhost üzerinde oluşturmuş bulunmaktayım.
char msg[1000] = "Hello from SpaceSockets2!\n"; //Gönderilecek mesaj.
while(1){ //Sonsuz döngü.
if(!udp_server.send_udp_message(msg)){ //UDP mesajı başarıyla gönderildiyse 0 (sıfır) döndürecektir.
std::cout<<"Mesaj gonderildi!"<<std::endl; //UDP mesajı gönderildiyse "mesaj gönderildi" yazsın.
}
}
return 0;
}
İki programı da derleyip çalıştırdığımızda ise, şöyle bir çıktı almaktayız:
Görüldüğü üzere, uygulamalarımız UDP ile haberleşiyor. Bir de Wireshark üzerinden izleyelim bakalım.
Evet, iki uygulamamız da birbirine UDP mesajları yolluyor. Port belirtmediğimiz için de 8080 portu üzerinden yolluyor.
Bir dahaki yazıda görüşmek üzere, takipte kalın!