Socket Programming TCP

Socket programming merupakan pemrogramman yang bertujuan agar satu program dapat berinteraksi dengan program lainnya dalam satu jaringan. Penggunaan socket programming memungkinkan adanya komunikasi antara client dan server. Salah satu contohnya sederhana penggunaan socket programming adalah pembuatan program untuk chatting. Program tersebut sebenarnya merupakan bentuk aplikasi komunikasi antara server dan client. Berikut adalah contoh socket programming client server yang dibuat menggunakan bahasa C :

CLIENT

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

#define PORT 3333
#define MAXDATASIZE 100

Bagian diatas ini merupakan deskripsi dari nomor port yang digunakan yaitu “3333” dan dibawahnya adalah jumlah byte maksimal yang dikirimkan.

int main(int argcchar const *argv[])
{
        int sockfd, numbytes;
        char buf[MAXDATASIZE];
        struct hostent *he;
        struct sockaddr_in their_addr;

Blok diatas berisikan informasi alamat dari server.

        if (argc != 2)
        {
                fprintf(stderr"usage: client hostname\n");
                exit(1);
        }

        if ((he=gethostbyname(argv[1])) == NULL)
        {
                perror("gethostbyname");
                exit(1);
        }

Blok diatas untuk mencari info tentang host.

        if ((sockfd = socket(AF_INET, SOCK_STREAM, 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_STREAM” menunjukkan bahwa program ini memakai stream socket atau TCP, yang berarti connection oriented.

        their_addr.sin_family = AF_INET;
        their_addr.sin_port = htons(PORT);
        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 yang lainnya diisi 0.

        if (connect(sockfd(struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1)
        {
                perror("connect");
                exit(1);
        }

        if ((numbytes=recv(sockfd, buf, MAXDATASIZE-10)) == -1)
        {
                perror("recv");
                exit(1);
        }

        buf[numbytes] '\0';
        printf("Received: %s", buf);
        close(sockfd);
        return 0;
}
                     
Blok program diatas merupakan proses koneksi ke server untuk melakukan proses pengiriman data ke server dengan perintah connect(). Selanjutnya terdapat proses penerimaan data yang datang dari server dengan perintah “recv”. 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>
#include <sys/wait.h>
#include <signal.h>

#define MYPORT 3333
#define BACKLOG 10

Bagian diatas ini merupakan deskripsi dari nomor port yang digunakan yaitu “3333” dan dibawahnya adalah jumlah koneksi yang diperbolehkan.


void sigchld_handler(int s)
{
        while(wait(NULL) 0);
}

int main(void)
{
        int sockfd, new_fd;
        struct sockaddr_in my_addr;
        struct sockaddr_in their_addr;
        int sin_size;
        struct sigaction sa;
        int yes=1;

Pada blok diatas terdapat “sockfd” yang merupakan koneksi saat ini dan “newfd” merupakan koneksi baru. Baris selanjutnya merupakan penetapan ip address server dan dilanjutkan penetapan ip address dari client.

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

Blok di atas adalah untuk membuat socket dengan perintah socket().“AF_NET” menunjukkan bahwa socket dihubungkan dengan protocol internet, dan “SOCK_STREAM” menunjukkan bahwa program ini memakai stream socket atau TCP, yang berarti connection oriented.

        if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1)
        {
                perror("setsockopt");
                exit(1);
        }

        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 yang lainnya diisi 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().

        if (listen(sockfd, BACKLOG) == -1)
        {
                perror("listen");
                exit(1);
        }

Blok di atas adalah untuk menerima koneksi yang masuk dengan perintah listen().

        sa.sa_handler = sigchld_handler;
        sigemptyset(&sa.sa_mask);
        sa.sa_flags = SA_RESTART;

        if (sigaction(SIGCHLD, &sa, NULL) == -1)
        {
                perror("sigaction");
                exit(1);
        }

        while(1)
        {
                sin_size sizeof(struct sockaddr_in);

                if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1)
                {
                        perror("accept");
                        continue;
                }

Blok di atas adalah untuk menerima koneksi yang masuk meserver dengan perintah accept().

                printf("server: got connection from %s\n", inet_ntoa(their_addr.sin_addr));

                if (!fork())
                {
                        close(sockfd);

                        if (send(new_fd"Pengiriman data dengan stream socket berhasil!\n"140) == -1)
                        {
                                perror("send");
                        }

                        close(new_fd);
                        exit(0);
                }

Blok di atas adalah untuk melakukan proses komunikasi dengan client yaitu proses menerima dan mengirim data dengan perintah read(). Lalu menutup socket.

                close(new_fd);
        }

        return 0;

}


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 (menggunakan os fendora) :

·         #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>


OUTPUT SERVER DAN CLIENT





 

CLOUD COMPUTING

PENDAHULUAN
Seiring dengan perkembangan jaman, teknologi saat ini mengalami perkembangan kearah pencapaian kemudahan dan kenyamanan luar biasa, sehingga kegiatan sehari-hari yang dianggap tidak mungkin dapat dikerjakan dalam waktu singkat. Pengembangan teknologi computasi berbasis internet saat ini lebih diarahkan pada proses aplikasi sistem yang mudah dan tidak memerlukan banyak waktu atau tenaga.
Permasalahan diperoleh dalam pengolahan sistem jaringan. Apabila ada suatu perubahan program aplikasi internet pada server dalam jaringan lokal, datanya harus di-instal ulang atau disesuaikan kembali. termasuk pada pemakaian komputer biasa diperlukan sistem operasi dan program aplikasi. Sistem operasi sangat menentukan program aplikasi. Kalau pemakai memilih sistem operasi MS Windows misalnya, maka aplikasinya pun harus berbasis Windows. Demikian juga kalau sistemnya berbasis DOS, Linux, Mac, dan sebagainya.
Sekarang konsep teknologi informasi Cloud Computing sedang hangat dibicarakan. Istilah Cloud Computing mulai banyak didengar dan perkembangannya sangat luar biasa. Disebut-sebut teknologi Cloud Computing dapat menghilangkan permasalahan yang dijelaskan diatas. Perusahaan-perusahaan besar di bidang IT pun sekarang mencurahkan perhatiannya ke sana. Apa sebenarnya Cloud Computing itu ? Komputasi awan merupakan istilah bagi dunia TI yang sistemnya hanya disewa. Maksudnya, dalam menerapkan teknologi ini, pelanggan diharuskan untuk menyewa beberapa komponen kerja di TI, seperti server penyimpanan data hingga data center. Melihat dari tren ini, kita dapat memprediksi masa depan, standard teknologi akan menjadi lebih sederhana karena ketersediaan dari banyak cloud service. Seluruh nama besar seperti IBM, Microsoft, Google, dan Apple, saat ini sedang terlibat dalam peperangan untuk menjadi penguasa terbesar terhadap teknologi awan ini.

TEORI
Pengertian Cloud Computing
Cloud computing atau yang seringkali hanya disebut sebagai cloud adalah era baru penggunaan resource komputer, baik itu hardware maupun software, yang ada di tempat lain (remote location) dan bisa diakses melalui internet network. Ketika kita mengakses, menggunakan, dan memanfaatkan resource komputer di tempat lain melalui internet, sebenarnya kita tengah memanfaatkan cloud computing. Resource komputer yang ada di remote location tersebut bisa dishare dan digunakan oleh banyak orang melalui internet.


Sejarah dan Perkembangan Cloud
Cloud computing adalah hasil dari evolusi bertahap di mana sebelumnya terjadi fenomena grid computing, virtualisasi, application service provision (ASP) dan Software as a Service (SaaS). Konsep penyatuan computing resources melalui jaringan global sendiri dimulai pada tahun 1960an. Dimana setiap manusia di dunia ini dapat terhubung dan bisa mengakses program dan data dari situs manapun, di manapun. Para pakar komputasi lainnya juga memberikan penambahan terhadap konsep ini, diantaranya menawarkan ide mengenai jaringan komputasi yang akan menjadi infrastruktur publik, sama seperti the service bureaus yang sudah ada sejak tahun enam puluhan.
Cloud computing telah berkembang berdampingan dengan perkembangan Internet dan Web. Namun karena terjadi perubahan teknologi bandwidth yang cukup besar pada tahun 1990-an, maka Internet lebih dulu berkembang dibanding cloud computing. Faktor pendorong utama cloud computing adalah karena adanya revolusi Internet, matangnya teknologi visual, perkembangan universal banwidth berkecepatan tinggi, dan perangkat lunak universal.
Banyak prefesional IT mengetahui keuntungan cloud computing dalam hal fleksibilitas penyimpanan yang tinggi dan penghematan biaya. Namun mereka juga memiliki kekhawatiran terhadap keamanan data perusahaan mereka di dalam cloud. Para ahli sependapat bahwa cloud computing akan mengubah pemandangan komputasi saat ini. Andreas Asander, Vice-principal of product management at virtualisation security specialist dari Clavister mengatakan bahwa di saat masalah keamanan sudah terselesaikan maka layanan cloud computing “memungkinkan perusahaan untuk memperluas infrastruktur, menambah kapasitas sesuai permintaan, atau meng-outsourcekeseluruhan infrastrukturnya, mengakibatkan fleksibilitas yang lebih besar, serta pilihan sumber daya yang lebih beragam dan juga pengurangan biaya yang signifikan.

Kekurangan dan Kelebihan Cloud Computing
Kelebihan
Kemudahan Akses. Untuk mengerjakan tugas, kita tidak harus berada dalam satu komputer yang sama. Kita bisa membuatnya dengan aplikasi lain. Namun kita harus terhubung dengan internet dan mengerjakannya secara online.
Efisiensi Biaya. Dengan memaksimalkan penggunaan utilisasi sisa yang tidak terpakai, kita dapat menciptakan beberapa virtual server lain. Dengan proses ini kita bisa mendapatkan kapasitas fisik komputer yang berlipat karena mengurangi infrastruktur komputer sehingga biaya sewa pelanggan menjadi lebih rendah. Selain itu dengan adanya komputasi awan, kita juga tidak dibebankan dengan besarnya biaya untuk membayar lisensi atas software-software yang kita install dan kita gunakan, karena semua software sudah bisa digunakan melalui komputasi awan. Efisiensi biaya juga timbul dari biaya operasional, seperti SDM maintenance, biaya listrik, biaya overhead, dan lain-lain. Pelanggan hanya membayar sesuai pemakaian (on demand).
Fleksibilitas dalam Menambah Kapasitas. Dengan cloud kita tidak perlu melakukan proses pengadaan komputer yang memakan banyak waktu. Cukup dengan melakukan penyimpanan data pada suatu media penyimpanan dan mengkoneksikannya dengan internet. Maka kita dapat mengakses dan menggunakannya kembali.
Kemudahan untuk Monitoring & Server Management. Proses monitoring dan manajemen server akan jauh lebih mudah karena semua terkoneksi dengan web portal pelanggan. Kita hanya tinggal melihat dashboard saja untuk mengetahui status global server-server kita. Untuk membuat, meng-upgrade dan me-manage server serta menginstalasi software sangat mudah, karena sudah disediakan automation-tools untuk melakukan hal tersebut.
Orang IT akan lebih banyak memikirkan pengembangan. Fungsi TI bagi perusahaan adalah mendukung pengembangan bisnis perusahaan. Banyak perusahaan sukses akibat penerapan TI yang tepat dan memberikan keunggulan kompetitif. Dengan adanya cloud service, maka sebagian kegiatan operasi dan server maintenance sudah dialihkan, sehingga terdapat waktu lebih bagi departemen TI untuk melakukan kegiatan lain.
Akses secara remote. Cloud computing membuat bisnis Anda tidak terbatas pada satu lokasi saja. Anda dapat mengakses dari mana saja di seluruh dunia dan kapan saja. Yang Anda perlukan hanya koneksi Internet, user ID dan password.

Kekurangan
Faktor yang paling penting dalam penggunaan sistem komputasi awan adalah koneksi internet. Jika tidak ada koneksi internet maka kita dapat menggunakan sistem komputasi awan. Di Indonesia, masih ada beberapa wilayah yang belum terjangkau oleh akses internet, sehingga membuat koneksi internet kurang memadai dan sering kali tidak stabil karena pengaruh cuaca maupun lingkungan pada wilayah tersebut.
Kerahasiaan dan keamanan adalah salah satu hal yang paling diragukan pada komputasi awan. Dengan menggunakan sistem komputasi awan berarti kita mempercayakan sepenuhnya atas keamanan dan kerahasiaan data-data kepada perusahaan penyedia server komputasi awan. Saat mengalami gangguan, kita tidak dapat menuntut pihak server karena kesalahan data-data tersebut.
Selain itu kualitas server komputasi awan adalah salah satu pertimbangan terpenting sebelum kita memutuskan untuk menyediakan jasa penyedia server komputasi awan. Ketika server down atau permorma kurang bagus, kita malah akan dirugikan karena kualitas server yang buruk.

ANALISIS
Cloud computing merupakan tren baru dibidang komputasi terdistribusi dimana berbagai pihak dapat mengembangkan aplikasi dan layanan yang berbasis SOA dijaringan internet. Email yang tersedia dalam bentuk web mail merupakan contoh yang sangat kecil dari teknologi cloud computing. Dengan menggunakan layanan email seperti Gmail dan Yahoo Mail, orang tidak perlu lagi menggunakan Outlook atau aplikasi desktop lainnya untuk email mereka. Membaca email dengan browser memungkinkan dilakukan di mana saja sepanjang ada koneksi internet.

REFERENSI