Socket
programming merupakan pemrogramman yang bertujuan agar satu program dapat
berinteraksi dengan program lainnya dalam satu jaringan. Terdapat banyak socket
yang terdapat pada system operasi linux, namun terdapat 2 socket yang paling
utama yaitu stream socket dan datagram socket. Datagram socket merupakan
connectionless socket karena untuk interaksi client server tidak harus selalu
terhubung terus menerus. Berikut adalah contoh program client server
menggunakan datagram socket yang dibuat menggunakan bahasa C :
CLIENT
#include
<stdio.h>
#include
<stdlib.h>
#include
<unistd.h>
#include
<errno.h>
#include
<string.h>
#include
<sys/types.h>
#include
<sys/socket.h>
#include
<netinet/in.h>
#include
<arpa/inet.h>
#include
<netdb.h>
#define
MYPORT 4950
Baris diatas menjelaskan nomor port server
yang digunakan
int
main(int argc, char *argv[])
{
int sockfd;
struct sockaddr_in their_addr;
struct hostent *he;
int numbytes;
Blok diatas berisikan informasi alamat dari server.
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);
}
Blok diatas untuk
mencari info tentang host.
if ((sockfd = socket(AF_INET, SOCK_DGRAM,
0)) == -1)
{
perror("socket");
exit(1);
}
Blok diatas untuk
membuat socket dengan perintah socket. “AF_NET” menunjukkan bahwa socket
dihubungkan dengan protocol internet, dan “SOCK_DGRAM” menunjukkan bahwa
program ini memakai datagram socket, yang berarti connectionless.
their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(MYPORT);
their_addr.sin_addr = *((struct in_addr
*)he->h_addr);
memset(&(their_addr.sin_zero), '\0',
8);
Pada
baris awal yaitu untuk host byte order atau big endian. Baris selanjutnya untuk
network byte order. Dan diakhiri dengan menset 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;
}
Blok program
diatas merupakan proses koneksi ke server. Selanjutnya terdapat proses pengiriman
data ke server dan diakhiri dengan menutup hubungan dengan perintah close().
SERVER
#include
<stdio.h>
#include
<stdlib.h>
#include
<unistd.h>
#include
<errno.h>
#include
<string.h>
#include
<sys/types.h>
#include
<sys/socket.h>
#include
<netinet/in.h>
#include
<arpa/inet.h>
#define
MYPORT 4950
#define
MAXBUFLEN 100
Bagian diatas ini merupakan deskripsi dari nomor port yang
digunakan yaitu “4950” dan dibawahnya adalah jumlah koneksi yang diperbolehkan.
int
main(void)
{
int sockfd;
struct sockaddr_in my_addr;
struct sockaddr_in their_addr;
int addr_len, numbytes;
char buf[MAXBUFLEN];
Pada blok diatas
terdapat “sockfd” yang merupakan koneksi saat ini. Baris selanjutnya merupakan
penetapan ip address server dan dilanjutkan penetapan ip address dari client.
if ((sockfd = socket(AF_INET, SOCK_DGRAM,
0)) == -1)
{
perror("socket");
exit(1);
}
Blok di atas adalah untuk membuat socket
dengan perintah socket().
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
memset(&(my_addr.sin_zero), '\0', 8);
Blok diatas
untuk melakukan proses pengalamatan. Pada baris awal yaitu untuk host byte
order atau big endian. Baris selanjutnya untuk network byte order. Baris ketiga
disi dengan ip address server. Dan akan menset semua nilai menjadi 0.
if (bind(sockfd, (struct sockaddr *)&my_addr,
sizeof(struct sockaddr)) == -1)
{
perror("bind");
exit(1);
}
Blok di atas
adalah untuk mengikatkan socket kepada sebuah alamat network dengan perintah
bind().
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;
}
Blok program
diatas merupakan proses koneksi dengan client. Selanjutnya terdapat proses penerimaan
data dari client dan diakhiri dengan menutup hubungan dengan perintah close().
LANGKAH-LANGKAH
MENJALANKAN PROGRAM
1.
Simpan program
client dengan nama client.c dan program server dengan server.c.
2.
Lakukan instalasi
gcc atau compiler untuk bahasa c lainnya :
·
#yum
install gcc
3.
Lakukan kompilasi
program :
·
#gcc
client.c –o client
·
#gcc
server.c –o server
4.
Jalankan program
server lalu dilanjutkan dengan menjalankan program client :
·
#./server
·
#./client
<ip server> <pesan tanpa spasi/dalam tanda kutip>
OUTPUT SERVER DAN CLIENT
0 komentar:
Posting Komentar