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 Of California ,
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
- Internet Socket (DARPA)
- UNIX Socket
- X.25 Socket (CCITT X.25)
- 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.
Tidak ada komentar:
Posting Komentar