DATAGRAM SOCKET

Socket programming merupakan pemrogramman yang bertujuan agar satu program dapat berinteraksi dengan program lainnya dalam satu jaringan. Terdapat banyak socket yang terdapat pada system operasi linux, namun terdapat 2 socket yang paling utama yaitu stream socket dan datagram socket. Datagram socket merupakan connectionless socket karena untuk interaksi client server tidak harus selalu terhubung terus menerus. Berikut adalah contoh program client server menggunakan datagram socket yang dibuat menggunakan bahasa C :

CLIENT

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

#define MYPORT 4950

Baris diatas menjelaskan nomor port server yang digunakan

int main(int argc, char *argv[])
{
    int sockfd;
    struct sockaddr_in their_addr;
    struct hostent *he;
    int numbytes;

Blok diatas berisikan informasi alamat dari server.

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

    // dpt info tentang host
    if ((he=gethostbyname(argv[1])) == NULL)
    {
        perror("gethostbyname");
        exit(1);
    }

Blok diatas untuk mencari info tentang host.


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

Blok diatas untuk membuat socket dengan perintah socket. “AF_NET” menunjukkan bahwa socket dihubungkan dengan protocol internet, dan “SOCK_DGRAM” menunjukkan bahwa program ini memakai datagram socket, yang berarti connectionless.

    their_addr.sin_family = AF_INET;
    their_addr.sin_port = htons(MYPORT);
    their_addr.sin_addr = *((struct in_addr *)he->h_addr);
    memset(&(their_addr.sin_zero), '\0', 8);

Pada baris awal yaitu untuk host byte order atau big endian. Baris selanjutnya untuk network byte order. Dan diakhiri dengan menset semua nilai ke 0.

    if ((numbytes=sendto(sockfd, argv[2], strlen(argv[2]), 0, (struct sockaddr *)&their_addr, sizeof(struct sockaddr))) == -1)
    {
        perror("sendto");
        exit(1);
    }

    printf("Kirim %d byte ke %s\n", numbytes,
    inet_ntoa(their_addr.sin_addr));
    close(sockfd);
   
    return 0;
}

Blok program diatas merupakan proses koneksi ke server. Selanjutnya terdapat proses pengiriman data ke server dan diakhiri dengan menutup hubungan dengan perintah close().


SERVER

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

#define MYPORT 4950
#define MAXBUFLEN 100

Bagian diatas ini merupakan deskripsi dari nomor port yang digunakan yaitu “4950” dan dibawahnya adalah jumlah koneksi yang diperbolehkan.


int main(void)
{
    int sockfd;
    struct sockaddr_in my_addr;
    struct sockaddr_in their_addr;
    int addr_len, numbytes;
    char buf[MAXBUFLEN];

Pada blok diatas terdapat “sockfd” yang merupakan koneksi saat ini. Baris selanjutnya merupakan penetapan ip address server dan dilanjutkan penetapan ip address dari client.


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

Blok di atas adalah untuk membuat socket dengan perintah socket().


    my_addr.sin_family = AF_INET;
    my_addr.sin_port = htons(MYPORT);
    my_addr.sin_addr.s_addr = INADDR_ANY;
    memset(&(my_addr.sin_zero), '\0', 8);

Blok diatas untuk melakukan proses pengalamatan. Pada baris awal yaitu untuk host byte order atau big endian. Baris selanjutnya untuk network byte order. Baris ketiga disi dengan ip address server. Dan akan menset semua nilai menjadi 0.

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

Blok di atas adalah untuk mengikatkan socket kepada sebuah alamat network dengan perintah bind().

    addr_len = sizeof(struct sockaddr);

    if ((numbytes=recvfrom(sockfd,buf, MAXBUFLEN-1, 0, (struct sockaddr *)&their_addr, &addr_len)) == -1)
    {
        perror("recvfrom");
        exit(1);
    }

    printf("Mendapat paket dari : %s\n",inet_ntoa(their_addr.sin_addr));
    printf("Panjang paket : %d bytes \n",numbytes);
    buf[numbytes] = '\0';
    printf("Isi paket : \"%s\"\n",buf);
    close(sockfd);

    return 0;
}

Blok program diatas merupakan proses koneksi dengan client. Selanjutnya terdapat proses penerimaan data dari client dan diakhiri dengan menutup hubungan dengan perintah close().


LANGKAH-LANGKAH MENJALANKAN PROGRAM

1.    Simpan program client dengan nama client.c dan program server dengan server.c.

2.    Lakukan instalasi gcc atau compiler untuk bahasa c lainnya :

·         #yum install gcc

3.    Lakukan kompilasi program :

·         #gcc client.c –o client
·         #gcc server.c –o server

4.    Jalankan program server lalu dilanjutkan dengan menjalankan program client :

·         #./server
·         #./client <ip server> <pesan tanpa spasi/dalam tanda kutip>


OUTPUT SERVER DAN CLIENT



Penulis : Bagus Bayu Baskara ~ Sebuah blog yang menyediakan berbagai macam informasi

Artikel DATAGRAM SOCKET ini dipublish oleh Bagus Bayu Baskara pada hari Minggu, 01 Juni 2014. Semoga artikel ini dapat bermanfaat.Terimakasih atas kunjungan Anda silahkan tinggalkan komentar.sudah ada 0 komentar: di postingan DATAGRAM SOCKET
 

0 komentar:

Posting Komentar