Yükleniyor...

Ağ Programlama

Ağ Programlama, C++ ile yazılım geliştirirken uygulamaların bilgisayarlar arasında veri alışverişi yapabilmesini sağlayan temel bir beceridir. C++’ta ağ programlama, yüksek performans gerektiren sunucu-istemci uygulamaları, gerçek zamanlı veri iletimi, dağıtık sistemler ve IoT projeleri gibi çeşitli senaryolarda kritik öneme sahiptir.
C++ dilinde ağ programlama yaparken, socket’ler, TCP/UDP protokolleri ve veri paketlerinin yönetimi gibi temel kavramların yanında, veri yapıları ve algoritmaların etkin kullanımı, OOP prensipleriyle güvenli ve sürdürülebilir kod yazımı önemlidir. Ayrıca bellek yönetimi ve hata yakalama konularına dikkat edilmelidir; aksi takdirde bellek sızıntıları veya veri kayıpları yaşanabilir.
Bu eğitimde, okuyucu C++ kullanarak basit bir TCP sunucusu kurmayı, istemci bağlantılarını kabul etmeyi, mesaj gönderip almayı ve hata yönetimi uygulamalarını öğrenebilecektir. Ayrıca, çoklu istemci desteği, performans optimizasyonu ve güvenlik önlemleri gibi ileri seviye konulara da değinilecektir. Bu bilgiler, C++ ile ağ tabanlı uygulamalar geliştiren yazılım mühendisleri için güçlü bir temel oluşturur ve sistem mimarisi bağlamında etkili çözümler geliştirmeyi mümkün kılar.

Temel Örnek

text
TEXT Code
\#include <iostream>
\#include <cstring>
\#include \<sys/types.h>
\#include \<sys/socket.h>
\#include \<netinet/in.h>
\#include \<unistd.h>

int main() {
int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket < 0) {
std::cerr << "Socket oluşturulamadı" << std::endl;
return 1;
}

sockaddr_in serverAddr{};
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = INADDR_ANY;
serverAddr.sin_port = htons(8080);

if (bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) {
std::cerr << "Bind hatası" << std::endl;
close(serverSocket);
return 1;
}

if (listen(serverSocket, 5) < 0) {
std::cerr << "Listen hatası" << std::endl;
close(serverSocket);
return 1;
}

std::cout << "Sunucu 8080 portunda çalışıyor..." << std::endl;

int clientSocket = accept(serverSocket, nullptr, nullptr);
if (clientSocket < 0) {
std::cerr << "Accept hatası" << std::endl;
close(serverSocket);
return 1;
}

const char* message = "C++ sunucusundan merhaba!\n";
send(clientSocket, message, std::strlen(message), 0);
close(clientSocket);
close(serverSocket);

return 0;

}

Bu temel örnek, bir TCP sunucusunun adım adım nasıl oluşturulduğunu göstermektedir. socket() ile iletişim noktası oluşturulur, bind() ile IP ve port atanır, listen() ile gelen bağlantılara hazır hale getirilir ve accept() ile istemciler kabul edilir. send() fonksiyonu, istemciye veri göndermeyi sağlar. close() ile socket kapatılır ve kaynaklar serbest bırakılır.
Kod, C++’ta hataların kontrol edilmesi ve kaynakların düzgün yönetilmesini sağlayan iyi uygulama örneklerini içerir. const kullanımı ile veri güvenliği sağlanmış, return değerleri kontrol edilerek hatalar yakalanmıştır. Bu örnek, ağ programlamada temel kavramları öğrenmek ve güvenli kod yazımı pratiği yapmak için uygundur.

Pratik Örnek

text
TEXT Code
\#include <iostream>
\#include <thread>
\#include <vector>
\#include <cstring>
\#include \<sys/types.h>
\#include \<sys/socket.h>
\#include \<netinet/in.h>
\#include \<unistd.h>

void handleClient(int clientSocket) {
char buffer\[1024];
std::memset(buffer, 0, sizeof(buffer));
ssize_t bytesRead = recv(clientSocket, buffer, sizeof(buffer) - 1, 0);
if (bytesRead > 0) {
std::cout << "Mesaj alındı: " << buffer << std::endl;
const char* response = "Mesaj alındı\n";
send(clientSocket, response, std::strlen(response), 0);
}
close(clientSocket);
}

int main() {
int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket < 0) return 1;

sockaddr_in serverAddr{};
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = INADDR_ANY;
serverAddr.sin_port = htons(8080);

if (bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) return 1;
if (listen(serverSocket, 5) < 0) return 1;

std::vector<std::thread> threads;
while (true) {
int clientSocket = accept(serverSocket, nullptr, nullptr);
if (clientSocket >= 0) {
threads.emplace_back(std::thread(handleClient, clientSocket));
}
}

for (auto& t : threads) t.join();
close(serverSocket);
return 0;

}

Bu gelişmiş örnek, çoklu istemci desteğine sahip bir TCP sunucusu sunar. Her istemci, ayrı bir thread içinde işlenir. recv() ile güvenli veri alımı yapılır ve buffer taşmalarının önüne geçilir. std::vector kullanımı, thread yönetimini kolaylaştırır ve join() ile tüm thread’ler düzgün şekilde sonlandırılır. Bu örnek, C++’ta RAII, concurrency ve standart kütüphane kullanımı açısından iyi bir uygulamadır.

C++ ağ programlamada iyi uygulamalar, kritik fonksiyonların dönüş değerlerinin kontrolü, RAII kullanımı, bloklanmayan socket işlemleri ve etkin hata yönetimini içerir. Yaygın hatalar arasında bellek sızıntıları, hatalı hata kontrolü ve verimsiz algoritmalar bulunur. Debugging için detaylı loglama, Valgrind gibi araçlar ve hata kodu yönetimi önerilir. Performans optimizasyonu için buffer tekrar kullanımı, batch işlemleri ve non-blocking socket’ler kullanılır. Güvenlik açısından veri doğrulama, overflow önleme ve SSL/TLS kullanımı önemlidir.

📊 Referans Tablosu

C++ Element/Concept Description Usage Example
Socket Ağ iletişim noktası int sock = socket(AF_INET, SOCK_STREAM, 0);
Bind IP ve port atar bind(sock, (struct sockaddr*)\&addr, sizeof(addr));
Listen Sunucuyu dinlemeye hazırlar listen(sock, 5);
Accept Gelen bağlantıyı kabul eder int client = accept(sock, nullptr, nullptr);
Send/Recv Veri gönderir ve alır send(client, msg, strlen(msg), 0); recv(client, buffer, 1024, 0);
Threads Çoklu istemci yönetimi std::thread t(handleClient, client);

Ağ programlama C++’ta uygulama geliştirenler için kritik bir beceridir. TCP/UDP protokolleri, concurrency, buffer yönetimi ve hata kontrolü konularında yetkinlik, güçlü ve güvenilir ağ uygulamaları üretmeyi sağlar.
İleri seviyede, Boost.Asio, SSL/TLS entegrasyonu, gelişmiş veri yapıları ve gerçek dünya projeleri (chat uygulamaları, HTTP sunucuları) çalışmaları önerilir. Bu pratikler, ağ programlama yeteneklerini geliştirip C++ ile ölçeklenebilir ve güvenli uygulamalar oluşturmayı mümkün kılar.

🧠 Bilginizi Test Edin

Başlamaya Hazır

Test Your Knowledge

Test your understanding of this topic with practical questions.

3
Sorular
🎯
70%
Geçmek İçin
♾️
Süre
🔄
Deneme

📝 Talimatlar

  • Her soruyu dikkatle okuyun
  • Her soru için en iyi cevabı seçin
  • Quiz'i istediğiniz kadar tekrar alabilirsiniz
  • İlerlemeniz üstte gösterilecek