Network Programming: Socket Programlama ile Client-Server Uygulaması

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

Socket Programlama: İletişimin Temel Taşları​


Bir ağ iletişimi için iki ana role ihtiyacımız vardır: Hizmeti sunan Server (Sunucu) ve hizmeti talep eden Client (İstemci). Bu süreç, telefonla birini aramaya çok benzer.



1. İletişim Akışı (TCP Modeli)​


Bağlantı tabanlı bir iletişimde (TCP), her iki tarafın izlemesi gereken belirli bir protokol sırası vardır:


  • []Server tarafı: Socket oluşturur -> Bir IP/Port'a bağlar (bind) -> Dinlemeye başlar (listen) -> Gelen bağlantıyı kabul eder (accept).
    []Client tarafı: Socket oluşturur -> Sunucunun adresine bağlanır (connect).



2. Basit Bir TCP Server Örneği (Linux/Unix Mantığı)​


Soket programlamada her şey bir "file descriptor" (dosya tanımlayıcı) üzerinden döner. İşte temel bir sunucu iskeleti:

C++:
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>

int main() {
// 1. Soket Olusturma (IPv4, TCP)
int server_fd = socket(AF_INET, SOCK_STREAM, 0);

// 2. Adres Tanımlama
sockaddr_in address;
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY; // Tum ag kartlarini dinle
address.sin_port = htons(8080);       // Port 8080

// 3. Bind (Bağlama)
bind(server_fd, (struct sockaddr*)&address, sizeof(address));

// 4. Dinleme
listen(server_fd, 3);

// 5. Kabul Etme ve Veri Okuma
int new_socket = accept(server_fd, nullptr, nullptr);
char buffer[1024] = {0};
read(new_socket, buffer, 1024);

std::cout << "Gelen Mesaj: " << buffer << std::endl;

close(new_socket);
close(server_fd);

}



3. Protokoller: TCP mi, UDP mi?​


Ağ programlamasında veriyi nasıl göndereceğinize karar vermeniz gerekir:

ÖzellikTCP (Transmission Control)UDP (User Datagram)
GüvenilirlikGarantili. Veri gitmezse tekrar gönderilir.Garantisiz. Veri kaybolabilir.
HızDaha yavaş (Onay mekanizması var).Çok hızlı.
SıralamaVeri gönderildiği sırayla ulaşır.Veri karışık sırada ulaşabilir.
KullanımWeb (HTTP), Dosya (FTP), E-posta.Online Oyunlar, Canlı Yayın, VoIP.



4. Modern C++ ve Kütüphaneler​


Doğrudan sistem soketleriyle çalışmak (yukarıdaki örnekteki gibi) zahmetli ve hata payı yüksek bir iştir. Gerçek projelerde genellikle bu karmaşıklığı soyutlayan kütüphaneler kullanılır:


  • []Asio (Boost.Asio): Endüstri standardıdır. Modern C++ ile asenkron ağ programlama sağlar.
    []SFML Network: Oyun geliştiricileri için çok daha basit bir arayüz sunar.
  • POCO C++ Libraries: HTTP sunucuları ve karmaşık ağ protokolleri için zengindir.



Sonuç​


Socket programlama, C++'ın donanım ve işletim sistemiyle ne kadar iç içe olabildiğinin en güzel kanıtıdır. Bir mesajın bir bilgisayardan çıkıp kilometrelerce ötedeki başka bir terminale ulaşmasını sağlamak büyüleyicidir. Ancak güvenlik (SSL/TLS) ve eşzamanlılık (aynı anda binlerce istemciye bakmak) gibi konular bu alanın asıl zorlu kısımlarıdır.
 
Geri
Üst