Proses dalam TCP adalah:
- Untuk melakukan sambungan client server, program server seharusnya berjalan terlebih dahulu.
- Di sisi server disediakan sebuah socket, yang disebut welcoming socket yang fungsinya untuk mengesan adanya permintaan sambungan daripada client.
- 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.
- 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.
- 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
- Simpan program client dengan nama client.c dan program server dengan nama server.c
- Lakukan installasi gcc. Petunjuk instalasinya ada disini.
- Lakukan Kompilasi Program Jalankan program server, kemudian jalankan program
client#gcc client.c -o client#gcc server.c -o server
- Jalankan program server, kemudian jalankan program
client#./server
#./client
- 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
1 Komen:
makasih gan infonya. sangat bermanfaat
Post a Comment