Minggu, 08 Februari 2015

Transfer Control Protocol (TCP) Socket Programming

        TCP menyediakan layanan transfer yang dapat diandalkan dengan mengirimkan paket datagrams per kelompok antar server dan client dengan pemeriksaan. 

Keuntungan TCP:

- Mampu menangani paket yang hilang
- Mampu menangani kedatangan paket ganda.
- Dapat mengatasi penerimaan paket secara beriringan.
- Menyediakan alur penerimaan paket.
- Data yang diterima dapat diepercaya dan diandalkan.

Kelemahan TCP :

- Waktu lebih lama.
- Paket yang dikirim besar.

Fungsi socket protocol TCP


  1. socket(AF_INET, SOCK_STREAM, 0), berfungsi untuk membuat socket dan parameter family yang digunakan adalah AF_INET yaitu internet protocol dan socket yang digunakan adalah SOCK_STREAM yang berfungsi untuk membuka socket pada TCP.
  2. htonl(), meng-convert unsigned integer ke network byte order.
  3. inet_ntoa(), ntoa singkatan 'network to ascii', nilai return-nya berupa string dari alamat yang dilewatkan.
  4. inet_addr(), meng-convert string menjadi network byte order.
  5. bind(), digunakan pada pihak server, untuk membuka 'port' komunikasi.
  6. write(), send(), bertugas mengirimkan data.
  7. read(), recv(), bertugas menerima data.
  8. connect(), digunakan pada pihak client, untuk mengadakan koneksi ke server.
  9. listen(), menunggu koneksi socket.
  10. accept(), menerima koneksi socket.
  11. close() dan shutdown(), digunakan untuk menutup atau mengakhiri koneksi.

Diagram Alur Socket Programming dengan UDP


Diagram alur socket programming

Program TCP Socket dengan Bahasa C

Server.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

void error(const char *msg)
{
perror(msg);
exit(1);
}

int main(int argc, char *argv[])
{
int sockfd, newsockfd, portno;
socklen_t clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
if (argc < 2) {
fprintf(stderr,"ERROR, no port provided\n");
exit(1);
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = atoi(argv[1]); /* ambil syntax ke 2 dari perintah */
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);
if (bind(sockfd, (struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0)
error("ERROR on binding");
listen(sockfd,5);
clilen = sizeof(cli_addr);
newsockfd = accept(sockfd,
(struct sockaddr *) &cli_addr,
&clilen);
if (newsockfd < 0)
error("ERROR on accept");
bzero(buffer,256);
n = read(newsockfd,buffer,255);
if (n < 0) error("ERROR reading from socket");
printf("Here is the message: %s\n",buffer);
n = write(newsockfd,"I got your message",18);
if (n < 0) error("ERROR writing to socket");
close(newsockfd);
close(sockfd);
return 0;
}

Client.c 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
void error(const char *msg)
{
    perror(msg);
    exit(0);
}
int main(int argc, char *argv[])
{
    int sockfd, portno, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;
    char buffer[256];
    if (argc < 3) {
       fprintf(stderr,"usage %s hostname port\n", argv[0]);
       exit(0);
    }
    portno = atoi(argv[2]);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
        error("ERROR opening socket");
    server = gethostbyname(argv[1]);
    if (server == NULL) {
        fprintf(stderr,"ERROR, no such host\n");
        exit(0);
    }
    bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    bcopy((char *)server->h_addr,
         (char *)&serv_addr.sin_addr.s_addr,
         server->h_length);
    serv_addr.sin_port = htons(portno);
    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0)
        error("ERROR connecting");
    printf("Please enter the message: ");
    bzero(buffer,256);
    fgets(buffer,255,stdin);
    n = write(sockfd,buffer,strlen(buffer));
    if (n < 0)
         error("ERROR writing to socket");
    bzero(buffer,256);
    n = read(sockfd,buffer,255);
    if (n < 0)
         error("ERROR reading from socket");
    printf("%s\n",buffer);
    close(sockfd);
    return 0;
}


nb: Copy source code di atas untuk melakukan demo

Sumber: 
I Putu Agus Eka Pratama, S.T.,M.T. 2014. Handbook Jaringan Komputer. Bandung: Penerbit Informatika.
http://sumarna.staff.gunadarma.ac.id/Downloads/files/31673/2.+Pemrograman+TCP+socket.pdf

Tidak ada komentar:

Posting Komentar