CodeBlanks Logo Icon CodeBlanks

TCP sunucu

TCP sunucu yazmayı öğrenirsin.

TCP sunucu nedir?

Bir TCP sunucu (server), gelen bağlantıları bekleyen taraftır. Soket oluşturduktan sonra bind() ile bir porta bağlar, listen() ile bağlantı beklemeye başlar ve accept() ile gelen bağlantıyı kabul eder.

Örnek: bind(sock, (sockaddr*)&addr, sizeof(addr)); soketi adrese bağlar. listen(sock, 5); bağlantı kuyruğunu açar (5 bekleyen bağlantı). int client = accept(sock, nullptr, nullptr); bir istemci bağlantısı kabul eder ve yeni bir soket döndürür. Sunucu adresinde addr.sin_addr.s_addr = INADDR_ANY; kullanırsan sunucu tüm ağ arayüzlerinden bağlantı kabul eder.

listen ve accept

listen(sock, backlog) soketi pasif duruma geçirir: bağlantı kabul etmeye hazır hale gelir. backlog bekleme kuyruğunun uzunluğudur. accept(sock, ...) bir istemci bağlantısı gelene kadar bekler (engelleyici, blocking) ve o bağlantı için yeni bir soket döndürür.

Örnek: listen(sock, 5); ile en fazla 5 bağlantı kuyrukta bekler. int client = accept(sock, nullptr, nullptr); bir istemci bağlandığında yeni bir soket verir. Bu yeni soket send ve recv için kullanılır; ana soket yalnızca yeni bağlantı kabul etmeye devam eder. Sunucu genelde bir döngüde sürekli accept çağırır. Bu derste döngü olmadan temel akışı göreceğiz.

Uygulama TCP sunucu kur

#include <sys/socket.h> ve #include <netinet/in.h> ekle. int sock = socket(AF_INET, SOCK_STREAM, 0); ile soket oluştur. sockaddr_in addr; tanımla; addr.sin_family = AF_INET;, addr.sin_port = htons(8080);, addr.sin_addr.s_addr = INADDR_ANY; ata. bind(sock, (sockaddr*)&addr, sizeof(addr)); ve listen(sock, 5); çağır. std::cout << "Sunucu hazır"; yaz.

Başlangıç kodu

main.cpp
#include <iostream>

// Soket başlıklarını ekle, sunucu kur

int main() {
    // socket, bind ve listen çağrılarını ekle
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>

int main() {
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8080);
    addr.sin_addr.s_addr = INADDR_ANY;
    bind(sock, (sockaddr*)&addr, sizeof(addr));
    listen(sock, 5);
    std::cout << "Sunucu hazır";
    return 0;
}

Beklenen çıktı

Sunucu hazır

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 bind çağrısını tamamla

Soru
____(sock, (sockaddr*)&addr, sizeof(addr));
Cevap
bind(sock, (sockaddr*)&addr, sizeof(addr));

Açıklama: bind, soketi bir porta bağlar.

2 Parçayı rolüne eşle

Kavram Anlamı
bind(sock, ...) Porta bağlar
listen(sock, 5) Bağlantı bekler
accept(sock, ...) İstemci kabul eder
INADDR_ANY Tüm arayüzler

3 accept ne döndürür?

  • Yeni bir istemci soketi Doğru cevap
  • Bağlantı durum kodu
  • Port numarası
  • IP adresi

Açıklama: accept, istemci için yeni bir soket döndürür.

İleri seviye bölümündeki tüm dersler