Kamis, 05 Juni 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
 

Tidak ada komentar:

Posting Komentar