socket programming

25
Socket Programming Socket Programming Isbat Uzzin Isbat Uzzin

Upload: moses-sutton

Post on 03-Jan-2016

57 views

Category:

Documents


1 download

DESCRIPTION

Socket Programming. Isbat Uzzin. Pendahuluan. aplikasi di jaringan, transaksinya didasarkan pada konsep client-server . Sebuah atau beberapa client meminta/ request pelayanan ke server. Aplikasi client-server menggunakan protokol tranport untuk saling berinteraksi. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Socket Programming

Socket ProgrammingSocket Programming

Isbat UzzinIsbat Uzzin

Page 2: Socket Programming

PendahuluanPendahuluan

aplikasi di jaringan, transaksinya didasarkan pada aplikasi di jaringan, transaksinya didasarkan pada konsep konsep client-serverclient-server. Sebuah atau beberapa . Sebuah atau beberapa clientclient meminta/meminta/requestrequest pelayanan ke server. pelayanan ke server.

Aplikasi Aplikasi client-serverclient-server menggunakan protokol menggunakan protokol tranporttranport untuk saling berinteraksi. untuk saling berinteraksi.

Ketika proses interaksi terjadi, suatu aplikasi harus Ketika proses interaksi terjadi, suatu aplikasi harus memberikan informasi-informasi secara detail memberikan informasi-informasi secara detail tentang :tentang : Informasi tentang apakah dia Informasi tentang apakah dia client client atau atau server.server. Pengirim memberikan informasi tentang data yang dikirim.Pengirim memberikan informasi tentang data yang dikirim. Penerima memberikan informasi tentang dimana data Penerima memberikan informasi tentang dimana data

diletakkan, dll diletakkan, dll

Page 3: Socket Programming

Konsep SocketKonsep Socket Antarmuka (Antarmuka (interfaceinterface) antara program aplikasi dengan protokol ) antara program aplikasi dengan protokol

komunikasi pada suatu sistem operasi disebut komunikasi pada suatu sistem operasi disebut Application Application Program Interface (API)Program Interface (API). . API API didefinisikan sebagai suatu didefinisikan sebagai suatu kumpulan instruksi yang mendukung proses interaksi antara kumpulan instruksi yang mendukung proses interaksi antara suatu perangkat lunak dengan suatu protokol yang digunakan.suatu perangkat lunak dengan suatu protokol yang digunakan.

Pada mesin keluarga Pada mesin keluarga LinuxLinux, , socket socket terintegrasi dengan terintegrasi dengan I/OI/O sehingga aplikasi yang berkomunikasi dengan sehingga aplikasi yang berkomunikasi dengan socket,socket, cara cara kerjanya sama dengan suatu aplikasi yang mengakses kerjanya sama dengan suatu aplikasi yang mengakses peralatan peralatan I/OI/O. Oleh karena itu untuk memahami cara kerja . Oleh karena itu untuk memahami cara kerja socket pada socket pada LinuxLinux, sebelumnya harus juga memahami fasilitas , sebelumnya harus juga memahami fasilitas I/OI/O pada pada LinuxLinux..

Page 4: Socket Programming

Konsep SocketKonsep Socket Pada saat suatu aplikasi berkomunikasi, awalnya Pada saat suatu aplikasi berkomunikasi, awalnya

aplikasi membuat aplikasi membuat socket socket baru, maka pada baru, maka pada aplikasi tersebut akan diberikan nomer yang aplikasi tersebut akan diberikan nomer yang digunakan sebagai referensi digunakan sebagai referensi socketsocket. Jika ada . Jika ada suatu sistem yang menggunakan nomer referensi suatu sistem yang menggunakan nomer referensi socket socket tersebut, maka akan terjalin suatu jaringan tersebut, maka akan terjalin suatu jaringan komunikasi antar komputer sebaik transfer data komunikasi antar komputer sebaik transfer data lokal lokal

Page 5: Socket Programming

Konsep Socket…Konsep Socket… Untuk berkomunikasi dengan Untuk berkomunikasi dengan serverserver, , client client harus tahu nomor harus tahu nomor IP serverIP server

begitu juga nomor begitu juga nomor portport yang dituju, nomor port menunjukkan service yang yang dituju, nomor port menunjukkan service yang dijalankan. Contoh port 23 untuk dijalankan. Contoh port 23 untuk Telnet ServerTelnet Server, port 25 untuk , port 25 untuk Mail ServerMail Server dan port 80 untuk dan port 80 untuk Web ServerWeb Server. Dalam hal ini aplikasi di client sudah . Dalam hal ini aplikasi di client sudah mengetahui port yang akan dituju. Contoh program aplikasi di client yang mengetahui port yang akan dituju. Contoh program aplikasi di client yang meminta service di server ada;ah ftp, telnet, ssh. Untuk melihat service bisa meminta service di server ada;ah ftp, telnet, ssh. Untuk melihat service bisa dilihat pada file dilihat pada file /etc/services/etc/services..

Program yang berjalan di server, akan berjalan sepanjang waktu (disebut Program yang berjalan di server, akan berjalan sepanjang waktu (disebut sebagai daemon) sampai mesin/service dimatikan, menunggu request dari sebagai daemon) sampai mesin/service dimatikan, menunggu request dari client client sesuai service yang diminta. sesuai service yang diminta.

Page 6: Socket Programming

Procedure Utama SocketProcedure Utama Socket Client, meminta layanan, langkah :Client, meminta layanan, langkah :

Membuka koneksi client ke server, yang di dalamnya adalah Membuka koneksi client ke server, yang di dalamnya adalah :: Membuat socket dengan perintah socket()Membuat socket dengan perintah socket() melakukan pengalamatan ke server.melakukan pengalamatan ke server. Menghubungi server dengan Menghubungi server dengan connect()connect()

Melakukan komunikasi (mengirim dan menerima data), Melakukan komunikasi (mengirim dan menerima data), dengan menggunakan perintah dengan menggunakan perintah write()write() dan dan read()read()

Menutup hubungan Menutup hubungan Server, menyediakan layanan, langkah:Server, menyediakan layanan, langkah:

Melakukan prosedur pembukaan koneksi yang di Melakukan prosedur pembukaan koneksi yang di dalamnya berupa langkah – langkah : membuat socket, dalamnya berupa langkah – langkah : membuat socket, mengikat socket, menyiapkan socket menerima koneksi, mengikat socket, menyiapkan socket menerima koneksi, pengalamatan socket pengalamatan socket

Looping utama adalah menerima koneksi, dan Looping utama adalah menerima koneksi, dan melakukan komunikasi data (mengirim dan menerima). melakukan komunikasi data (mengirim dan menerima).

Page 7: Socket Programming

Tipe SocketTipe Socket User Datagram SocketUser Datagram Socket

connectionless socket connectionless socket Jika client mengirimkan data ke server, data tersebut ada Jika client mengirimkan data ke server, data tersebut ada

kemungkinan sampai ke server atau tidak. Untuk itu client kemungkinan sampai ke server atau tidak. Untuk itu client menunggu sinyal ‘error free’ dari client. menunggu sinyal ‘error free’ dari client.

Jika client tidak menerima sinyal ‘error free’ dalam suatu kurun Jika client tidak menerima sinyal ‘error free’ dalam suatu kurun waktu, maka client akan mengirimkan lagi data tersebut. waktu, maka client akan mengirimkan lagi data tersebut.

Contoh aplikasi yang menggunakan datagram socket adalah Contoh aplikasi yang menggunakan datagram socket adalah tftptftp dan dan bootpbootp. .

Stream SocketStream Socket Connection oriented socketConnection oriented socket Client dan server harus saling berkomunikasi sebelum transfer Client dan server harus saling berkomunikasi sebelum transfer

data.data. Pada stream socket dalam melakukan koneksi salah satu Pada stream socket dalam melakukan koneksi salah satu

prosedur yang penting adalah prosedur yang penting adalah accept()accept(), yang dipakai untuk , yang dipakai untuk menerima koneksi dari client menerima koneksi dari client

Page 8: Socket Programming

Stream SocketStream Socket

Page 9: Socket Programming

Mekanisme Stream SocketMekanisme Stream Socket

Page 10: Socket Programming

Socket ProgrammingSocket Programming Langkah – langkah dasar di client :Langkah – langkah dasar di client :

Membuka koneksi client ke server, yang di dalamnya adalah :Membuka koneksi client ke server, yang di dalamnya adalah : Membuat socket dengan perintah socket()Membuat socket dengan perintah socket() melakukan pengalamatan ke server.melakukan pengalamatan ke server. Menghubungi server dengan Menghubungi server dengan connect()connect()

Melakukan komunikasi (mengirim dan menerima data), Melakukan komunikasi (mengirim dan menerima data), dengan menggunakan perintah dengan menggunakan perintah write()write() dan dan read()read()

Menutup hubungan dengan perintah Menutup hubungan dengan perintah close()close();; Langkah – langkah dasar di server :Langkah – langkah dasar di server :

Membuat socket dengan perintah Membuat socket dengan perintah socket()socket() Mengikatkan socket kepada sebuah alamat network dengan Mengikatkan socket kepada sebuah alamat network dengan

perintah perintah bind()bind() Menyiapkan socket untuk menerima koneksi yang masuk Menyiapkan socket untuk menerima koneksi yang masuk

dengan perintah dengan perintah listen()listen() Menerima koneksi yang masuk ke server dengan perintah Menerima koneksi yang masuk ke server dengan perintah

accept()accept() Melakukan komunikasi (mengirim dan menerima data), Melakukan komunikasi (mengirim dan menerima data),

dengan menggunakan perintah dengan menggunakan perintah write()write() dan dan read()read()

Page 11: Socket Programming

Struktur PengalamatanStruktur Pengalamatanstruct sockaddr {struct sockaddr {unsigned short sa_family; /* protocol family */unsigned short sa_family; /* protocol family */char sa_data[14]; /* address data. */char sa_data[14]; /* address data. */}; };

struct sockaddr_in {struct sockaddr_in {unsigned short sin_family; /* address family (always AF_INET) */unsigned short sin_family; /* address family (always AF_INET) */unsigned short sin_port; /* port num in network byte order */unsigned short sin_port; /* port num in network byte order */struct in_addr sin_addr; /* IP addr in network byte order */struct in_addr sin_addr; /* IP addr in network byte order */unsigned char sin_zero[8]; /* pad to sizeof(struct sockaddr) */unsigned char sin_zero[8]; /* pad to sizeof(struct sockaddr) */}; };

struct sockaddr_in serveraddr;struct sockaddr_in serveraddr;/* fill in serveraddr with an address *//* fill in serveraddr with an address */……/* Connect takes (struct sockaddr *) as its second argument *//* Connect takes (struct sockaddr *) as its second argument */connect(clientfd, (struct sockaddr *) &serveraddr,connect(clientfd, (struct sockaddr *) &serveraddr,sizeof(serveraddr)); sizeof(serveraddr));

Page 12: Socket Programming

Prosedure Pembukaan KoneksiProsedure Pembukaan Koneksiint open_clientfd(char *hostname, int port)int open_clientfd(char *hostname, int port){{int clientfd;int clientfd;struct hostent *hp;struct hostent *hp;struct sockaddr_in serveraddr;struct sockaddr_in serveraddr;if ((clientfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)if ((clientfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)return -1; /* check errno for cause of error */return -1; /* check errno for cause of error *//* Fill in the server's IP address and port *//* Fill in the server's IP address and port */if ((hp = gethostbyname(hostname)) == NULL)if ((hp = gethostbyname(hostname)) == NULL)return -2; /* check h_errno for cause of error */return -2; /* check h_errno for cause of error */bzero((char *) &serveraddr, sizeof(serveraddr));bzero((char *) &serveraddr, sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_family = AF_INET;bcopy((char *)hp->h_addr,bcopy((char *)hp->h_addr,(char *)&serveraddr.sin_addr.s_addr, hp->h_length);(char *)&serveraddr.sin_addr.s_addr, hp->h_length);serveraddr.sin_port = htons(port);serveraddr.sin_port = htons(port);/* Establish a connection with the server *//* Establish a connection with the server */if (connect(clientfd, (struct sockaddr *) &serveraddr,if (connect(clientfd, (struct sockaddr *) &serveraddr,sizeof(serveraddr)) < 0)sizeof(serveraddr)) < 0)return -1;return -1;return clientfd;return clientfd;} }

Page 13: Socket Programming

Prosedure Pembuatan socketProsedure Pembuatan socket

int clientfd; /* socket descriptor */int clientfd; /* socket descriptor */

if ((clientfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)if ((clientfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)

return -1; /* check errno for cause of error */return -1; /* check errno for cause of error */

... (more) ... (more)

Page 14: Socket Programming

Prosedure PengalamatanProsedure Pengalamatan

int clientfd; /* socket descriptor */int clientfd; /* socket descriptor */struct hostent *hp; /* DNS host entry */struct hostent *hp; /* DNS host entry */struct sockaddr_in serveraddr; /* server’s IP address struct sockaddr_in serveraddr; /* server’s IP address

*/*/....../* fill in the server's IP address and port *//* fill in the server's IP address and port */if ((hp = gethostbyname(hostname)) == NULL)if ((hp = gethostbyname(hostname)) == NULL)return -2; /* check h_errno for cause of error */return -2; /* check h_errno for cause of error */bzero((char *) &serveraddr, sizeof(serveraddr));bzero((char *) &serveraddr, sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_family = AF_INET;bcopy((char *)hp->h_addr,bcopy((char *)hp->h_addr,(char *)&serveraddr.sin_addr.s_addr, hp->h_length);(char *)&serveraddr.sin_addr.s_addr, hp->h_length);serveraddr.sin_port = htons(port); serveraddr.sin_port = htons(port);

Page 15: Socket Programming

Prosedure Koneksi ke ServerProsedure Koneksi ke Server

int clientfd; /* socket descriptor */int clientfd; /* socket descriptor */struct hostent *hp; /* DNS host entry */struct hostent *hp; /* DNS host entry */struct sockaddr_in serveraddr; /* server’s IP address struct sockaddr_in serveraddr; /* server’s IP address

*/*/....../* fill in the server's IP address and port *//* fill in the server's IP address and port */if ((hp = gethostbyname(hostname)) == NULL)if ((hp = gethostbyname(hostname)) == NULL)return -2; /* check h_errno for cause of error */return -2; /* check h_errno for cause of error */bzero((char *) &serveraddr, sizeof(serveraddr));bzero((char *) &serveraddr, sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_family = AF_INET;bcopy((char *)hp->h_addr,bcopy((char *)hp->h_addr,(char *)&serveraddr.sin_addr.s_addr, hp->h_length);(char *)&serveraddr.sin_addr.s_addr, hp->h_length);serveraddr.sin_port = htons(port); serveraddr.sin_port = htons(port);

Page 16: Socket Programming

Prosedure Pengiriman Prosedure Pengiriman dan Penerimaan Datadan Penerimaan Data

if (write(sockfd, buff, strlen(buff))<0) if (write(sockfd, buff, strlen(buff))<0) {{ close(sockfd);close(sockfd); exit(1);exit(1); } }

if (read(sockfd, buff, MAXBUFFER)<0) if (read(sockfd, buff, MAXBUFFER)<0) {{ printf("server : proses read dari socket error \printf("server : proses read dari socket error \

n");n"); close(sockfd);close(sockfd); exit(1);exit(1); } }

Page 17: Socket Programming

User Datagram SocketUser Datagram Socket

Page 18: Socket Programming

Algoritma Datagram SocketAlgoritma Datagram Socket

socket

bind

recvfrom

close

SERVER

pengalamatan

socket

sendto

close

CLIENT

Page 19: Socket Programming

Procedure Datagram SocketProcedure Datagram Socket Langkah – langkah dasar di Langkah – langkah dasar di clientclient : :

Membuka koneksi Membuka koneksi client client ke ke serverserver, yang di , yang di dalamnya adalah :dalamnya adalah :

Membuat socket dengan perintah socket().Membuat socket dengan perintah socket(). melakukan pengalamatan ke server.melakukan pengalamatan ke server. Melakukan komunikasi (mengirimkan data), dengan Melakukan komunikasi (mengirimkan data), dengan

menggunakan perintah menggunakan perintah sendto()sendto() Menutup hubungan dengan perintah Menutup hubungan dengan perintah close()close();;

Langkah – langkah dasar di server :Langkah – langkah dasar di server : Membuat socket dengan perintah Membuat socket dengan perintah socket()socket() Mengikatkan socket kepada sebuah alamat network Mengikatkan socket kepada sebuah alamat network

dengan perintah dengan perintah bind()bind() Melakukan komunikasi (menerima data), dengan Melakukan komunikasi (menerima data), dengan

menggunakan perintah menggunakan perintah recvfrom()recvfrom()

Page 20: Socket Programming

Struktur PengalamatanStruktur Pengalamatan

Struktur pengalamatan yang dipakai antara Struktur pengalamatan yang dipakai antara stream socket dan datagram socket tidak ada stream socket dan datagram socket tidak ada perbedaan perbedaan

struct sockaddr_in {struct sockaddr_in {

unsigned short sin_family; /* address family (always unsigned short sin_family; /* address family (always AF_INET) */AF_INET) */

unsigned short sin_port; /* port num in network byte order */unsigned short sin_port; /* port num in network byte order */

struct in_addr sin_addr; /* IP addr in network byte order */struct in_addr sin_addr; /* IP addr in network byte order */

unsigned char sin_zero[8]; /* pad to sizeof(struct sockaddr) unsigned char sin_zero[8]; /* pad to sizeof(struct sockaddr) */*/

}; };

Page 21: Socket Programming

Procedure Client…Procedure Client…

Membuat socket dengan perintah Membuat socket dengan perintah socket() socket()

if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)

{{

perror("socket");perror("socket");

exit(1);exit(1);

{ {

Page 22: Socket Programming

Procedure Client…Procedure Client…

Selanjutnya setelah membuat socket Selanjutnya setelah membuat socket melakukan pengalamatan ke server melakukan pengalamatan ke server

their_addr.sin_family = AF_INET; // host byte ordertheir_addr.sin_family = AF_INET; // host byte order

their_addr.sin_port = htons(MYPORT); // short, network byte their_addr.sin_port = htons(MYPORT); // short, network byte orderorder

their_addr.sin_addr = *((struct in_addr *)he->h_addr);their_addr.sin_addr = *((struct in_addr *)he->h_addr);

memset(&(their_addr.sin_zero), '\0', 8); // zero the rest of the memset(&(their_addr.sin_zero), '\0', 8); // zero the rest of the structstruct

Page 23: Socket Programming

Procedure Client…Procedure Client…

Melakukan komunikasi (mengirim Melakukan komunikasi (mengirim data), dengan menggunakan perintah data), dengan menggunakan perintah sendto()sendto()

if ((numbytes=sendto(sockfd, argv[2], strlen(argv[2]), 0,if ((numbytes=sendto(sockfd, argv[2], strlen(argv[2]), 0, (struct sockaddr *)&their_addr, sizeof(struct (struct sockaddr *)&their_addr, sizeof(struct

sockaddr))) == -1) {sockaddr))) == -1) { perror("sendto");perror("sendto"); exit(1);exit(1);} }

Menutup hubungan dengan perintah Menutup hubungan dengan perintah close()close(); ;

Page 24: Socket Programming

Procedure ServerProcedure Server Melakukan prosedur pembukaan koneksi Melakukan prosedur pembukaan koneksi

yang di dalamnya berupa langkah: yang di dalamnya berupa langkah: Membuat socket, Membuat socket,

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

Mengikat socketMengikat socketif (bind(sockfd, (struct sockaddr *)&my_addr, if (bind(sockfd, (struct sockaddr *)&my_addr,

sizeof(struct sockaddr)) == -1) {sizeof(struct sockaddr)) == -1) { perror("bind");perror("bind"); exit(1);} exit(1);}

Pengalamatan socket Pengalamatan socket my_addr.sin_family = AF_INET; // host byte ordermy_addr.sin_family = AF_INET; // host byte order my_addr.sin_port = htons(MYPORT); // short, network byte ordermy_addr.sin_port = htons(MYPORT); // short, network byte order my_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IPmy_addr.sin_addr.s_addr = INADDR_ANY; // automatically fill with my IP memset(&(my_addr.sin_zero), '\0', 8); // zero the rest of the structmemset(&(my_addr.sin_zero), '\0', 8); // zero the rest of the struct

Page 25: Socket Programming

Procedure Server…Procedure Server…

Menerima koneksi dengan perintah Menerima koneksi dengan perintah recvfrom()recvfrom()

addr_len = sizeof(struct sockaddr);addr_len = sizeof(struct sockaddr);

if ((numbytes=recvfrom(sockfd,buf, MAXBUFLEN-1, 0,if ((numbytes=recvfrom(sockfd,buf, MAXBUFLEN-1, 0,

(struct sockaddr *)&their_addr, &addr_len)) (struct sockaddr *)&their_addr, &addr_len)) == -1) {== -1) {

perror("recvfrom");perror("recvfrom");

exit(1);exit(1);

} }