Site Meter

Thursday, June 5, 2014

Pemrograman Jaringan : Stream Socket

Stream socket digunakan untuk sistem komunikasi 2 arah dan menggunakan protokol TCP (Transmission Control Protocol). Contoh aplikasi yang menggunakan stream socket adalah telnet dan HTTP (web browser). TCP menjamin data terkirim secara urutan dan bebas daripada kesalahan (error), sedangkan IP (Internet Protocol) bertugas untuk mengatur lalu-lintas routing.
Proses dalam TCP adalah:

  1. Untuk melakukan sambungan client server, program server seharusnya berjalan terlebih dahulu.
  2. Di sisi server disediakan sebuah socket, yang disebut welcoming socket yang fungsinya untuk mengesan adanya permintaan sambungan daripada client.
  3. Di sisi client terdapatnya client socket. Jika ingin menghubungi server, maka melalui client socket-nya, client membuat sambungan ke welcoming socket milik server, dengan mode three-way handshake.
  4. Setelah welcoming socket menerima sambungan daripada client socket, aplikasi server akan membuat sambungan socket di sisi server. Dengan connection socket ini, client socket dan connection socket berinteraksi antara satu sama lain untuk mengirim dan menerima data. 
Berikut contoh program client server yang menggunakan stream socket yang dibuat dengan bahasa C.

  • Client
/*
** client02.c -- a datagram
*/

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define MYPORT 4950 // no port server yang digunakan

int main(int argc, char *argv[])
{
    int sockfd;
    struct sockaddr_in their_addr; // ip server
    struct hostent *he;
    int numbytes;
    
    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);
    }

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

    their_addr.sin_family = AF_INET; // host byte order
    their_addr.sin_port = htons(MYPORT); // host to network short
    their_addr.sin_addr = *((struct in_addr *)he->h_addr);
    memset(&(their_addr.sin_zero), '\0', 8); // set 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;
}

Program ini memberikan paket kepada alamat server yang ditentukan melalui parameter pada saat dijalankan. Didalamnya termasuk membuat socket dengan memanfaatkan system call yang tersedia seperti socket(), listen() dan connect()
  • Server 

/*
** server02.c -- a datagram sockets "server"
*/

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define MYPORT 4950 // no port server
#define MAXBUFLEN 100

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

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

    my_addr.sin_family = AF_INET; // host byte order
    my_addr.sin_port = htons(MYPORT); // host to network short
    my_addr.sin_addr.s_addr = INADDR_ANY; // ip address server
    memset(&(my_addr.sin_zero), '\0', 8); // set semua nilai menjadi 0

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

    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;
}

Pada program server menggunakan socket untuk mendapatkan file descriptor dan menghitung jumlah paket dan memberikan informasi tersebut pada saat dijalankan, serta menggunakan memanfaatkan banyak system call seperti socket(), bind(), listen(), connect(), dll. 

Langkah-langkah menjalankan program
  1. Simpan program client dengan nama client.c dan program server dengan nama server.c
  2. Lakukan installasi gcc. Petunjuk instalasinya ada disini.
  3. Lakukan Kompilasi Program Jalankan  program server, kemudian jalankan program client
         #gcc client.c -o client
          #gcc server.c -o server
  4.  Jalankan program server, kemudian jalankan program client
          #./server
         #./client
maka  outputnya adalah sebagai berikut :
  • Client
            
  • Server 

            




Sumber : 
http://salmaann.blogspot.com/2014/05/program-datagram-socket.html
http://haizum2009.blogspot.com/2009/08/stream-socket-tcp-transmission-control_11.html
 

1 Komen:

Unknown said...

makasih gan infonya. sangat bermanfaat

Post a Comment

Related Posts Plugin for WordPress, Blogger...
 
MMORPG Games - MMORPG List - Video Game Music