Basit Bir Veri Akış İstemcisi
Önceki İstemci-Sunucu Mimarisi Sonraki
Basit Bir Veri Akış İstemcisi
Bu program daha da basit. Bu istemcinin tek yaptığı şey komut satırından belirleyeceğiniz bir konağa 3490 numaralı port üzerinden bağlanmak. Sonra da sunucunun gönderdiği dizgeyi alıp ekrana basmak.
/*
** client.c -- bir veri akış soketi istemcisi örneği
*/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define PORT 3490 // istemcinin bağlanacağı port

#define MAXDATASIZE 100 // bir seferde kabul edebileceğimizazami byte miktarı

int main(int argc, char *argv[])
{
    int sockfd, numbytes;
    char buf[MAXDATASIZE];
    struct hostent *he;
    struct sockaddr_in their_addr; // bağlananın adres bilgisi

    if (argc != 2) {
        fprintf(stderr,"usage: client hostname\n");
        exit(1);
    }

    if ((he=gethostbyname(argv[1])) == NULL) {  // konak bilgisini al
        perror("gethostbyname");
        exit(1);
    }

    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
        perror("socket");
        exit(1);
    }

    their_addr.sin_family = AF_INET;    // konak bayt sıralaması
    their_addr.sin_port = htons(PORT);  // short, ağ bayt sıralaması
    their_addr.sin_addr = *((struct in_addr *)he->h_addr);
    memset(&(their_addr.sin_zero), '\0', 8);  // geriye kalanı sıfırla

    if (connect(sockfd, (struct sockaddr *)&their_addr,
                                          sizeof(struct sockaddr)) == -1) {
        perror("connect");
        exit(1);
    }

    if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1) {
        perror("recv");
        exit(1);
    }

    buf[numbytes] = '\0';

    printf("Received: %s",buf);

    close(sockfd);

    return 0;
} 
Aklınızda bulunsun eğer sunucuyu çalıştırmadan yukarıdaki istemciyi çalıştıracak olursanız connect() işlevi "Connection refused" (Bağlantı reddedildi) hatası verir. Çok faydalı.
Önceki Üst Ana Başlık Sonraki
Basit Bir Veri Akış Sunucusu Başlangıç Veri Paketi Soketleri
Bir Linux Kitaplığı Sayfası