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:
| Özellik | TCP (Transmission Control) | UDP (User Datagram) |
|---|---|---|
| Güvenilirlik | Garantili. Veri gitmezse tekrar gönderilir. | Garantisiz. Veri kaybolabilir. |
| Hız | Daha yavaş (Onay mekanizması var). | Çok hızlı. |
| Sıralama | Veri gönderildiği sırayla ulaşır. | Veri karışık sırada ulaşabilir. |
| Kullanım | Web (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.