TCP Yankı Sunucusu Oluşturma
Eksiksiz bir TCP yankı sunucusu uygulamasını adım adım inceleyin
TCP Yankı Sunucusu Oluşturma, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.
Hedef
Bir bağlantıyı kabul eden, baytları okuyan ve aynı baytları geri yazan en küçük TCP sunucusunu oluşturun. Bu, ağ programlamasındaki "Hello World" örneğidir.
Sunucu İskeleti
Sunucu akışı şöyledir: soket oluşturma, bind, listen, accept, handle. Sonsuza kadar run.
int srv = socket(AF_INET, SOCK_STREAM, 0);
bind(srv, (sockaddr*)&addr, sizeof(addr));
listen(srv, 10);
while (true) {
int client = accept(srv, nullptr, nullptr);
handle(client);
close(client);
}Adresi Yeniden Kullanma Seçeneği
Sunucunun OS'nin bağlantı noktasını serbest bırakmasını beklemeden hemen yeniden başlatılabilmesi için SO_REUSEADDR ayarını yapın.
int yes = 1;
setsockopt(srv, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes));Yankı Döngüsü
Bir arabelleğe okuyun; aynı baytları geri yazın. İstemci bağlantıyı kapattığında durun.
void handle(int client) {
char buf[1024];
while (true) {
ssize_t n = recv(client, buf, sizeof(buf), 0);
if (n <= 0) break; // closed or error
send(client, buf, n, 0);
}
}Kısmi Okumalar ve Yazmalar
Hem recv hem de send, istenenden daha az bayt aktarabilir. Akış tabanlı bir protokolde işlem tamamlanana kadar döngü kullanın.
ssize_t total = 0;
while (total < n) {
ssize_t s = send(client, buf + total, n - total, 0);
if (s <= 0) break;
total += s;
}Birden Çok İstemciyi İşleme
En basit yaklaşım, her bağlantı için yeni bir iş parçacığı oluşturmaktır. Yüzlerce istemci için çalışır; binlerce istemcide zorlanır.
while (true) {
int client = accept(srv, nullptr, nullptr);
std::thread([client]{ handle(client); close(client); }).detach();
}Daha İyi Bir Seçenek: İş Parçacığı Havuzu
Ölçek büyüdükçe her bağlantı için bir iş parçacığı oluşturmak kaynakları boşa harcar. İş kuyruğuna sahip sabit bir iş parçacığı havuzu daha iyi ölçeklenir.
Düzgün Kapatma
Dinleme soketini düzgün biçimde kapatmak için SIGTERM/SIGINT sinyallerini handle edin. RAII, tüm istemci soketlerinin de kapatılmasını sağlamaya yardımcı olur.
Hata İşleme
Hataları beklenen durumlar olarak ele alın: istemciler bağlantıyı keser, ağlarda geçici sorunlar yaşanır ve OS sınırlarına ulaşılır. Günlük kaydı tutup devam edin; sorunlu bir istemci yüzünden çökmeyin.
Her İstemciyi Günlüğe Kaydetme
Gözlemlenebilirlik için uzak adresi günlüğe kaydedin.
sockaddr_in remote{};
socklen_t len = sizeof(remote);
int client = accept(srv, (sockaddr*)&remote, &len);
char ip[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &remote.sin_addr, ip, sizeof(ip));
std::cout << "client " << ip << ":" << ntohs(remote.sin_port);netcat ile Test Etme
Yankı sunucunuzu nc ile etkileşimli olarak test edin.
nc 127.0.0.1 8080
hello
hello # echoed backYankının Ötesi
Yankı sunucusunu şu tür yapılara genişletebilirsiniz:
- Satır tabanlı protokoller (HTTP benzeri)
- Çerçeveli ikili protokoller (uzunluk öneki)
- JSON veya Protobuf iletileri
Hızlı Kontrol
SO_REUSEADDR soket seçeneğinin amacı nedir?
Özet
En küçük TCP yankı sunucusu şu adımlardan oluşur: socket, setsockopt SO_REUSEADDR, bind, listen ve döngü içinde accept. Birden çok istemci için iş parçacıkları oluşturun veya iş parçacığı havuzu kullanın. Büyük ölçek için eşzamansız G/Ç'ye geçin (sonraki ders).
Sıkça Sorulan Sorular
“TCP Yankı Sunucusu Oluşturma” dersi ücretsiz mi?
Evet — “TCP Yankı Sunucusu Oluşturma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.
“TCP Yankı Sunucusu Oluşturma” dersinde ne öğreneceğim?
Eksiksiz bir TCP yankı sunucusu uygulamasını adım adım inceleyin C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C++ Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“TCP Yankı Sunucusu Oluşturma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- C++'ta BSD Soket API'si
- TCP Yankı Sunucusu Oluşturma
- epoll ve kqueue ile Eşzamansız IO
- Modern Eşzamansız IO için Boost Asio Kullanımı