CodeBlanks Logo Icon CodeBlanks

send ve recv

  • C kursu
  • İleri seviye
  • Ders 29/83
  • 5 dk

send ve recv ile veri alışverişi öğrenirsin.

send ve recv

send(fd, buf, n, 0), bağlantılı sokete n bayt yollar. Dönüş değeri gönderilen bayt sayısıdır. recv(fd, buf, n, 0), soketten en fazla n bayt okur.

Son parametre 0 varsayılan bayraktır; MSG_NOSIGNAL gibi seçenekler de vardır. recv bağlantı kapandığında 0 döndürür. read ve write da soketlerle çalışır; send/recv ise ek bayrak desteği verir.

socketpair

socketpair(AF_UNIX, SOCK_STREAM, 0, sv), birbirine bağlı iki soket oluşturur ve sv[0] ile sv[1]'e yazar. Birinin yazdığını diğeri okur.

Bu, aynı süreç içinde veya fork sonrası ebeveyn-çocuk arası iletişim için idealdir. Sunucu-istemci kurmadan hızlı test yaparsın: send(sv[0], msg, n, 0) yazar, recv(sv[1], buf, n, 0) okur. Ağ adresi veya bind gerekmez; bağlantı kuruludur.

Uygulama socketpair ile veri al

int sv[2]; socketpair(AF_UNIX, SOCK_STREAM, 0, sv); ile iki soket oluştur. send(sv[0], "merhaba", 7, 0); ile yaz. char buf[16]; memset(buf, 0, sizeof(buf)); recv(sv[1], buf, 7, 0); ile oku. printf("%s\n", buf); ile yazdır.

Başlangıç kodu

main.c
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>

// socketpair ile iki soket oluştur
// send ile yaz, recv ile oku
// buf'u yazdır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>

int main(void) {
    int sv[2];
    socketpair(AF_UNIX, SOCK_STREAM, 0, sv);
    send(sv[0], "merhaba", 7, 0);
    char buf[16];
    memset(buf, 0, sizeof(buf));
    recv(sv[1], buf, 7, 0);
    printf("%s\n", buf);
    close(sv[0]);
    close(sv[1]);
    return 0;
}

Beklenen çıktı

merhaba

Soru ve cevaplar

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

1 Veri alışverişi fonksiyonlarını eşle

Kavram Anlamı
send Veri yollar
recv Veri alır
socketpair İki bağlı soket
MSG_NOSIGNAL Sinyal engeli

2 recv bağlantı kapandığında ne döndürür?

  • 0 Doğru cevap
  • -1
  • 1
  • EOF

Açıklama: recv bağlantı kapandığında 0 döndürür.

3 send çağrısı

Soru
send(____, msg, 7, 0);
Cevap
send(sv[0], msg, 7, 0);

Açıklama: send(sv[0], ...) birinci sokete yazar.

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