Socket

Pengenalan Socket

PENDAHULUAN

 

Sejarah Socket Programming

Pada tanggal 7 januari 1958 (ARPA) Advanced Research Project Agency membeli beberapa komputer dari vendor yang berbeda beda. Kemudian ARPA mencoba untuk menyatukan semua komputer tersebut satu sama lain ARPA menemukan perbedaan untuk komunikasi antar bahasa dalam masing masing vendor komputer.

Pada tahun 1962, J. C. R. Licklider mengembangkan ide untuk menyatukan komunikasi komputer yang berbeda vendor tersebut. Meskipun masing masing komputer memiliki perbedaan yang sangat besar.

Sejak ide J. C. R. Licklider dikemukakan, ARPA berusaha untuk mengembangkan teori tersebut. Pada tahun 1960an ARPA berubah nama menjadi DARPA (Defense Advance Research Projects Agency. Pada tahun 1969 University OfCalifornia, Berkeley (UCB) mengembangkan UNIX yang dikenal sebagai BSD. Pada tahun 1982 BSD versi 4.1 dan BSD 4.2 diluncurkan oleh UCB yang didalamnya terdapat implementasi jaringan TCP/IP, konsep jaringan socket (UNIX Socket) dan interface. Dan DARPA juga menemukan Socketnya sendiri (Internet Socket).

Perjalanan Waktu Penemuan SOCKET

 

Alasan menggunakan socket

–          Sistem UNIX programming lebih banyak dipengaruhi oleh bahasa C

–          Internet didunia lebih banyak tersebar dengan sistem UNIX (TCP/IP)

 

Apa itu Socket ?

–          Socket adalah file descriptors, yaitu file yang membangun dan memperjelas sistem.

–          Socket adalah Application Program Interface (API)

–          Socket adalah metode protocol independent yang membuat koneksi diantara proses.

–          SOCKET = IP ADDRESS + PORT NUMBER

–          Socket adalah file yang berguna sebagai system calls (Komunikasi sistem). Contoh seperti, pesawat telepon.

–          Socket dapat mengirim dan menerima data dari network.

 

Jenis-Jenis Socket

  1. Internet Socket (DARPA)
  2. UNIX Socket
  3. X.25 Socket (CCITT X.25)
  4. dsb.

 

 

 

SIMPLE SOCKET PROGRAMMING (Praktekkin Yá)

 

Listing socket1.c

 

/* Listing socket1.c */

 

/*Contoh dari socketpair(2) function: */

 

 

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <errno.h>

#include <string.h>

#include <sys/types.h>

#include <sys/socket.h>

 

int

main(int argc,char **argv) {

int z; /* Status pengembalian kode*/

int s[2]; /* menyatukan socket*/

 

/*

* Membuat hubungan dengan socket local:

*/

z = socketpair(AF_LOCAL,SOCK_STREAM,0,s);

 

if ( z == -1 )

{

fprintf(stderr,”%s: socketpair(AF_LOCAL,SOCK_STREAM,0)\n”, strerror(errno));

 

return 1; /* Jika GAGAL koneksi */

}

 

/*

* Laporan socket pengembalian file descriptor :

*/

 

printf(“s[0] = %d;\n”,s[0]);

printf(“s[1] = %d;\n”,s[1]);

 

system(“netstat –unix -p”);

 

return 0;

}

 

Output Listing socket1.c:

s[0] = 3;

s[1] = 4;

(Not all processes could be identified, non-owned process info

will not be shown, you would have to be root to see it all.)

Active UNIX domain sockets (w/o servers)

Proto RefCnt Flags Type . . . I-Node PID/Program name Path

unix 1 [ ] STREAM . . . 406 – @00000019

unix 1 [ ] STREAM . . . 490 – @0000001f

unix 1 [ ] STREAM . . . 518 – @00000020

unix 0 [ ] STREAM . . . 117 – @00000011

unix 1 [ ] STREAM . . . 789 – @00000030

unix 1 [ ] STREAM . . . 549 – @00000023

unix 1 [ ] STREAM . . .1032 662/01lst01

unix 1 [ ] STREAM . . .1031 662/01lst01

unix 1 [ ] STREAM . . . 793 – /dev/log

unix 1 [ ] STREAM . . . 582 – /dev/log

unix 1 [ ] STREAM . . . 574 – /dev/log

unix 1 [ ] STREAM . . . 572 – /dev/log

unix 1 [ ] STREAM . . . 408 – /dev/log

 

 

Listing socket2.c

 

/* Listing socket2.c:

*

* contoh program sederhana koneksi socket dengan I/O:

*/

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

#include <errno.h>

#include <string.h>

#include <sys/types.h>

#include <sys/socket.h>

 

int

main(int argc,char **argv) {

int z; /* status pengembalian kode*/

int s[2]; /* koneksi socket */

char *cp; /* penunjuk yang sedang bekerja */

char buf[80]; /* kerja buffer */

 

/*

* membuat hubungan dengan local sockets:

*/

z = socketpair (AF_LOCAL,SOCK_STREAM,0,s);

 

if ( z == -1 )

{

fprintf(stderr, “%s: socketpair(AF_LOCAL,SOCK_STREAM,” “0)\n”, strerror(errno));

return 1; /* Jika Gagal Koneksi */

}

/*

* menulis pesan ke socket s[1]:

*/

z = write(s[1],cp=”Hello?”,6);

if ( z < 0 )

{

fprintf(stderr, “%s: write(%d,\”%s\”,%d)\n”, strerror(errno),s[1],cp,strlen(cp));

return 2; /* Jika gagal menulis */

}

 

printf(“Wrote message ‘%s’ on s[1]\n”,cp);

 

/*

* Membaca dari socket s[0]:

*/

z = read(s[0],buf,sizeof buf);

if ( z < 0 )

{

fprintf(stderr, “%s: read(%d,buf,%d)\n”, strerror(errno),s[0],sizeof buf);

return 3; /* Jika gagal membaca */

}

 

/*

* Melaporkan pesan

*/

buf[z] = 0; /* NUL terminate */

printf(“Received message ‘%s’ from socket s[0]\n”, buf);

 

/*

* mengirim balasan ke s[1] dari s[0]:

*/

z = write(s[0],cp=”Go away!”,8);

if ( z < 0 )

{

fprintf(stderr,

“%s: write(%d,\”%s\”,%d)\n”, strerror(errno),s[0],cp,strlen(cp));

return 4; /* Jika gagal menulis */

}

 

printf(“Wrote message ‘%s’ on s[0]\n”,cp);

 

/*

* Membaca dari socket s[1]:

*/

z = read(s[1],buf,sizeof buf);

if ( z < 0 )

{

fprintf(stderr,

“%s: read(%d,buf,%d)\n”,

 

strerror(errno),s[1],sizeof buf);

return 3; /* Jika gagal membaca */

}

 

/*

* Laporan bahwa pesan telah diterima pada s[0]:

*/

buf[z] = 0; /* NUL terminate */

printf(“Received message ‘%s’ from socket s[1]\n”, buf);

 

/*

*menutup sockets:

*/

close(s[0]);

close(s[1]);

 

puts(“Done.”);

return 0;

}

 

Output Listing socket2.c:

 

Wrote message ‘Hello?’ on s[1]

Received message ‘Hello?’ from socket s[0]

Wrote message ‘Go away!’ on s[0]

Received message ‘Go away!’ from socket s[1]

Done.

 

Leave a comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s