C++'ta BSD Soket API'si
C++ programlarında socket, bind, listen, accept, connect, send ve recv kullanın
C++'ta BSD Soket API'si, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 1. 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.
Soket API'si nedir?
BSD soket API'si, ağ programlaması için fiilî standarttır. Linux, macOS ve BSD sistemlerinde; küçük uyarlamalarla da Winsock üzerinden Windows'ta kullanılabilir.
Gerekli Üst Bilgi Dosyaları
Platform üst bilgi dosyalarını ekleyin ve POSIX türlerini kullanın.
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>Soket Oluşturma
socket çağrısı bir dosya tanımlayıcısı döndürür. Adres ailesini (IPv4), türü (TCP veya UDP) ve protokolü (varsayılan için 0) geçirin.
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror("socket");
return 1;
}Adres Yapıları
struct sockaddr_in, bir IPv4 adresi ve bağlantı noktası tutar. İşlevlere geçirirken struct sockaddr* türüne dönüştürün.
struct sockaddr_in addr{};
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);Bayt Sıralaması: Ana Makine ve Ağ
Ağ bayt sıralaması büyük endian'dır. Dönüştürme için htons, htonl, ntohs ve ntohl kullanın.
İstemci Bağlama
Bir TCP bağlantısı başlatmak için connect kullanın.
if (connect(sock, (sockaddr*)&addr, sizeof(addr)) < 0) {
perror("connect");
close(sock);
return 1;
}Gönderme ve Alma
send ve recv bayt alışverişi yapar. Her ikisi de istenenden daha azını döndürebilir; her zaman döngü kullanın.
const char* msg = "Hello";
send(sock, msg, strlen(msg), 0);
char buffer[1024];
ssize_t n = recv(sock, buffer, sizeof(buffer)-1, 0);
buffer[n] = '\0';Bağlama ve Dinleme (Sunucu)
Bir sunucu bir adrese bağlanır, dinler ve bağlantıları kabul eder.
int srv = socket(AF_INET, SOCK_STREAM, 0);
bind(srv, (sockaddr*)&addr, sizeof(addr));
listen(srv, 10);
int client = accept(srv, nullptr, nullptr);Soketi Kapatma
Unix'te close, Windows'ta ise closesocket çağırın.
close(sock);Hata İşleme
Soket işlevleri hata durumunda -1 döndürür ve errno değerini ayarlar. Her dönüş değerini denetleyin.
RAII ile Sarmalama
Çıplak dosya tanımlayıcılarının sızdırılması kolaydır. Bunları yıkıcıda close çağıran bir RAII türüyle sarın veya özel bir siliciyle std::unique_ptr kullanın.
struct SocketCloser {
void operator()(int* fd) const { if (*fd >= 0) ::close(*fd); }
};
using UniqueSocket = std::unique_ptr<int, SocketCloser>;Windows Farkları
Windows'ta:
<winsock2.h>dosyasını ekleyin vews2_32kitaplığına bağlayın- Kullanmadan önce
WSAStartupçağırın closeyerineclosesocketkullanın- Soket türü
SOCKET'tir (işaretsiz)
Hızlı Kontrol
Bir istemcinin sunucuya TCP bağlantısı başlatmasını sağlayan işlev çağrısı hangisidir?
Özet
BSD soket API'si, düşük seviyeli ağ iletişimi temel yapı taşları sunar. Bir soket oluşturun ve adresi yapılandırın; ardından istemci için connect, sunucu için bind+listen+accept kullanın. Bayt sıralamasını htons ailesindeki işlevlerle dönüştürün. Sızıntıları önlemek için tanımlayıcıları RAII ile sarın.
Sıkça Sorulan Sorular
“C++'ta BSD Soket API'si” dersi ücretsiz mi?
Evet — “C++'ta BSD Soket API'si” 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.
“C++'ta BSD Soket API'si” dersinde ne öğreneceğim?
C++ programlarında socket, bind, listen, accept, connect, send ve recv kullanın 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 1. dersidir.
“C++'ta BSD Soket API'si” 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ı