Minggu, 22 Juni 2014

Bioinformatika part 2

BIOINFORMATIKA


Sebelumnya, saya sempat membahasa seputar Bioinformatika pada blog ini secara singkat. disini saya akan mencoba menjabarkannya kembali agar lebih menambah wawasan para pembaca seputar Bioinformatika. 

PENDAHULUAN
Bioinformatika merupakan ilmu terapan yang lahir dari perkembangan teknologi informasi dibidang molekular. Pembahasan dibidang bioinformatik ini tidak terlepas dari perkembangan biologi molekular modern, salah satunya peningkatan pemahaman manusia dalam bidang genomic yang terdapat dalam molekul DNA.

Kemampuan untuk memahami dan memanipulasi kode genetik DNA ini sangat didukung oleh teknologi informasi melalui perkembangan hardware dan soffware. Baik pihak pabrikan sofware dan harware maupun pihak ketiga dalam produksi perangkat lunak. Salah satu contohnya dapat dilihat pada upaya Celera Genomics, perusahaan bioteknologi Amerika Serikat yang melakukan pembacaan sekuen genom manusia yang secara maksimal memanfaatkan teknologi informasi sehingga bisa melakukan pekerjaannya dalam waktu yang singkat (hanya beberapa tahun).

Perkembangan teknologi DNA rekombinan memainkan peranan penting dalam lahirnya bioinformatika. Teknologi DNA rekombinan memunculkan suatu pengetahuan baru dalam rekayasa genetika organisme yang dikenala bioteknologi. Perkembangan bioteknologi dari bioteknologi tradisional ke bioteknologi modren salah satunya ditandainya dengan kemampuan manusia dalam melakukan analisis DNA organisme, sekuensing DNA dan manipulasi DNA.

Sekuensing DNA satu organisme, misalnya suatu virus memiliki kurang lebih 5.000 nukleotida atau molekul DNA atau sekitar 11 gen, yang telah berhasil dibaca secara menyeluruh pada tahun 1977. Kemudia Sekuen seluruh DNA manusia terdiri dari 3 milyar nukleotida yang menyusun 100.000 gen dapat dipetakan dalam waktu 3 tahun, walaupun semua ini belum terlalu lengkap. Saat ini terdapat milyaran data nukleotida yang tersimpan dalam database DNA, GenBank di AS yang didirikan tahun 1982.

TEORI
Bioinformatika ialah ilmu yang mempelajari penerapan teknik komputasi untuk mengelola dan menganalisis informasi hayati. Bidang ini mencakup penerapan metode-metode matematika, statistika, dan informatika untuk memecahkan masalah-masalah biologi, terutama yang terkait dengan penggunaan sekuens DNA dan asam amino. Contoh topik utama bidang ini meliputi pangkalan datauntuk mengelola informasi hayati, penyejajaran sekuens (sequence alignment), prediksi struktur untuk meramalkan struktur protein atau pun struktur sekunder RNA, analisis filogenetik, dan analisis ekspresigen.
Bioinformatika pertamakali dikemukakan pada pertengahan 1980an untuk mengacu kepada penerapan ilmu komputer dalam bidang biologi. Meskipun demikian, penerapan bidang-bidang dalam bioinformatika seperti pembuatan pangkalan data dan pengembangan algoritma untuk analisis sekuens biologi telah dilakukan sejak tahun 1960an.

Kemajuan teknik biologi molekuler dalam mengungkap sekuens biologi protein (sejak awal1950an) dan asam nukleat (sejak 1960an) mengawali perkembangan pangkalan data dan teknik analisis sekuens biologi. Pangkalan data sekuens protein mulai dikembangkan pada tahun 1960an di Amerika Serikat, sementara pangkalan data sekuens DNA dikembangkan pada akhir 1970an di Amerika Serikat dan Jerman pada Laboratorium Biologi Molekuler Eropa (European Molecular Biology Laboratory).

Penemuan teknik sekuensing DNA yang lebih cepat pada pertengahan 1970an menjadi landasan terjadinya ledakan jumlah sekuens DNA yang dapat diungkapkan pada 1980an dan 1990an. Hal ini menjadi salah satu pembuka jalan bagi proyek-proyek pengungkapan genom, yang meningkatkan kebutuhan akan pengelolaan dan analisis sekuens, dan pada akhirnya menyebabkan lahirnya bioinformatika.

Perkembangan jaringan internet juga mendukung berkembangnya bioinformatika. Pangkalan data bioinformatika yang terhubungkan melalui internet memudahkan ilmuwan dalam mengumpulkan hasil sekuensing ke dalam pangkalan data tersebut serta memperoleh sekuens biologi sebagai bahan analisis. Selain itu, penyebaran program-program aplikasi bioinformatika melalui internet memudahkan ilmuwan dalam mengakses program-program tersebut dan kemudian memudahkan pengembangannya.

Pangkalan Data sekuens biologi dapat berupa pangkalan data primer untuk menyimpan sekuens primer asam nukleat dan protein, pangkalan data sekunder untuk menyimpan motif sekuens protein, dan pangkalan data struktur untuk menyimpan data struktur protein dan asam nukleat.

Pangkalan data utama untuk sekuens asam nukleat saat ini adalah GenBank (Amerika Serikat), EMBL (the European Molecular Biology Laboratory, Eropa), dan DDBJ (DNA Data Bank of Japan, Jepang). Ketiga pangkalan data tersebut bekerja sama dan bertukar data secara harian untuk menjaga keluasan cakupan masing-masing pangkalan data. Sumber utama data sekuens asam nukleat adalah submisi (pengumpulan) langsung dari peneliti individual, proyek sekuensing genom, dan pendaftaran paten. Selain berisi sekuens asam nukleat, entri dalam pangkalan data sekuens asam nukleat pada umumnya mengandung informasi tentang jenis asam nukleat (DNA atau RNA), namaorganisme sumber asam nukleat tersebut, dan segala sesuatu yang berkaitan dengan sekuens asam nukleat tersebut.

Selain asam nukleat, beberapa contoh pangkalan data penting yang menyimpan sekuens primer protein adalah PIR (Protein Information Resource, Amerika Serikat), Swiss-Prot (Eropa), danTrEMBL (Eropa). Ketiga pangkalan data tersebut telah digabungkan dalam UniProt, yang didanai terutama oleh Amerika Serikat. Entri dalam UniProt mengandung informasi tentang sekuens protein, nama organisme sumber protein, pustaka yang berkaitan, dan komentar yang pada umumnya berisi penjelasan mengenai fungsi protein tersebut.

Perangkat bioinformatika yang berkaitan erat dengan penggunaan pangkalan data sekuens Biologi ialah BLAST (Basic Local Alignment Search Tool). Penelusuran BLAST (BLAST search) pada pangkalan data sekuens memungkinkan ilmuwan untuk mencari sekuens baik asam nukleat maupun protein yang mirip dengan sekuens tertentu yang dimilikinya. Hal ini berguna misalnya untuk menemukan gen sejenis pada beberapa organisme atau untuk memeriksa keabsahan hasil sekuensingatau untuk memeriksa fungsi gen hasil sekuensing. Algoritma yang mendasari kerja BLAST adalah penyejajaran sekuens.

PDB (Protein Data Bank, Bank Data Protein) ialah pangkalan data tunggal yang menyimpan model struktur tiga dimensi protein dan asam nukleat hasil penentuan eksperimental (dengankristalografi sinar-X, spektroskopi NMR, dan mikroskopi elektron). PDB menyimpan data struktur sebagai koordinat tiga dimensi yang menggambarkan posisi atom-atom dalam protein atau pun asam nukleat.

ANALISA DAN KESIMPULAN
Analisa pada Bioinformatika diantaranya adalah Ekspresi gen. Ekspresi gen dapat ditentukan dengan mengukur kadar mRNA dengan berbagai macam teknik (misalnya dengan microarray ataupun Serial Analysis of Gene Expression ["Analisis Serial Ekspresi Gen", SAGE]). Teknik-teknik tersebut umumnya diterapkan pada analisis ekspresi gen skala besar yang mengukur ekspresi banyak gen (bahkan genom) dan menghasilkan data skala besar. Metode-metode penggalian data (data mining) diterapkan pada data tersebut untuk memperoleh pola-pola informatif. Sebagai contoh, metode-metode komparasi digunakan untuk membandingkan ekspresi di antara gen-gen, sementara metode-metode klastering (clustering) digunakan untuk mempartisi data tersebut berdasarkan kesamaan ekspresi gen.

Dengan Bioinformatika, data-data yang dihasilkan dari proyek genom dapat disimpan dengan teratur dalam waktu yang singkat dengan tingkat ketepatan yang tinggi serta sekaligus  dianalisa  dengan  program-program  yang  dibuat  untuk  tujuan  tertentu. Dalam dunia kedokteran, keberhasilan proyek genom ini membuka kemungkinan luas  untu menangan berbagai  penyaki geneti serta memprediks resiko terkena penyakit genetic itu sendiri. Juga dapat  digunakan untuk mengetahui respon tubuh terhadap obat sehingga keefektivitasan pengobatan dapat ditingkatkan. Karena Bioinformatika merupakan suatu bidang interdisipliner, maka Bioinformatika harus didukung oleh disiplin ilmu lain untuk dapat saling menunjang sehingga bermanfaat untuk kepentingan manusia. Bidang yang terkait dengan Bioinformatika diantaranya adalah Biophysics, Computational Biology,Medical In.

REFERENSI







Sabtu, 31 Mei 2014

Cloud Computing

CLOUD COMPUTING (KOMPUTASI AWAN)

PENDAHULUAN
Wikipedia mendefinisikan cloud computing sebagai “komputasi berbasis Internet, ketika banyak server digunakan bersama untuk menyediakan sumber daya, perangkat lunak dan data pada komputer atau perangkat lain pada saat dibutuhkan, sama seperti jaringan listrik”.

Gartner mendefinisikannya sebagai “sebuah cara komputasi ketika layanan berbasis TI yang mudah dikembangkan dan lentur disediakan sebagai sebuah layanan untuk pelanggan menggunakan teknologi Internet.”

Forester mendefinisikannya sebagai “standar kemampuan TI, seperti perangkat lunak, platform aplikasi, atau infrastruktur, yang disediakan menggunakan teknologi Internet dengan cara swalayan dan bayar-per-pemakaian.”

Secara sederhana, Cloud Computing dapat kita bayangkan seperti sebuah jaringan listrik. Apabila kita membutuhkan listrik, apakah kita harus punya pembangkit listrik sendiri? Tentu tidak. Kita tinggal menghubungi penyedia layanan (dalam hal ini, PLN), menyambungkan rumah kita dengan jaringan listrik, dan kita tinggal menikmati layanan tersebut. Pembayaran kita lakukan bulanan sesuai pemakaian.

Sejarah cloud computing dimulai pada tahun1960-an, John McCarth seorang pakar komputer dari MIT meramalkan bahwa suatu hari nanti komputerisasi akan menjadi infrastruktur publik layaknya seperti berlangganan listrik atau telepon. Kemudian pada akhir tahun 1990-an, lahir konsep ASP (Application Service Provider) yang ditandai munculnya perusahaan pengolah data center. Selanjutnya pada tahun1995, Larry Ellison, pendiri Oracle, melahirkan wacana “Network Computing” pasca penetrasi Microsoft Windows 95 yang merajai pasar software dunia pada saat itu. Ide itu menyebutkan bahwa PC tidak perlu dibenamkan software yang membuat berat kinerja dan cukup diganti sebuah terminal utama berupa server. Pada awal tahun 2000-an, Marc Beniof, eks Vice President Oracle melansir aplikasi CRM berbentuk “software as a service” bernama Salesforce.com sebagai penanda lahirnya cloud computing. Tahun 2005, situs online shopping Amazon.com meluncurkan Amazon EC2 (Elastic Compute Cloud), diikuti Google dengan Google App Engine, dan IBM yang melansir Blue Cloud Initiative.

TEORI
Dalam sistem cloud computing, ada pergeseran beban kerja yang signifikan. Komputer lokal tidak lagi harus melakukan semua beban kerja ketika menjalankan sebuah aplikasi. Jaringan komputer yang membentuk “awan”-lah yang akan menangani hal tersebut sebagai gantinya. Kebutuh hardware dan software pada sisi pengguna akan menurun. Satu-satunya hal yang dibutuhkan pengguna komputer adalah dapat menjalankan software antarmuka sistem cloud computing, yang dapat menjadi sesederhana browser Website, dan jaringan cloud menangani lainnya.

Image: Konsep Cloud Computing

Kemungkinan besar Anda telah menggunakan beberapa bentuk cloud computing. Jika Anda memiliki akun e-mail dengan layanan e-mail berbasis Web seperti Hotmail, Yahoo! Mail, atau Gmail, maka Anda telah memiliki beberapa pengalaman dengan cloud computing. Sebagai pengganti menjalankan program e-mail di komputer Anda, Anda login ke akun web e-mail dari jarak jauh. Software dan media penyimpanan data untuk akun Anda tidak ada di komputer Anda – itu ada pada layanan “cloud” komputer.

Arsitektur Cloud Computing
Ketika berbicara tentang sistem cloud computing, akan memudahkan jika kita membaginya menjadi dua bagian: front end dan back end. Mereka terhubung satu sama lain melalui jaringan, biasanya Internet. Front end adalah sisi pengguna komputer, atau klien. Back end adalah “awan” dari sistem.
Front end termasuk komputer klien (atau jaringan komputer) dan aplikasi, diperlukan untuk mengakses sistem cloud computing. Tidak semua sistem cloud computing memiliki antarmuka pengguna yang sama. Layanan seperti e-mail berbasis Web memanfaatkan browser Web yang ada seperti Internet Explorer atau Firefox. Pada sistem lain ada yang memiliki aplikasi unik yang menyediakan akses jaringan untuk klien.
Di back end sistem adalah berbagai komputer, server, dan sistem penyimpanan data yang menciptakan “awan” layanan komputasi. Secara teori, sebuah sistem cloud computing dapat mencakup hampir semua program komputer yang dapat Anda bayangkan, dari pengolahan data sampai video game. Biasanya, setiap aplikasi akan memiliki dedicated server sendiri.
Sebuah server pusat mengelola sistem, pemantauan lalu lintas dan  permintaan klien untuk memastikan semuanya berjalan lancar. Ini mengikuti serangkaian aturan yang disebut protokol dan menggunakan software khusus yang disebut middleware. Middleware memungkinkan jaringan komputer untuk berkomunikasi satu sama lain. Sering kali, server tidak berjalan pada kapasitas penuh. Itu berarti ada daya pemrosesan yang tidak terpakai akan sia-sia. Oleh karena itu, memungkinkan untuk memanipulasi sebuah server fisik dengan berpikir bahwa itu sebenarnya terdiri dari beberapa server, masing-masing berjalan dengan sistem operasi yang mandiri. Teknik ini disebut virtualisasi server. Dengan memaksimalkan output dari setiap server, virtualisasi server dapat mengurangi kebutuhan server secara fisik.
Jika sebuah perusahaan cloud computing memiliki banyak klien, ada kemungkinan permintaan ruang penyimpanan akan menjadi tinggi. Beberapa perusahaan memerlukan ratusan perangkat penyimpanan digital. Sistem cloud computing membutuhkan setidaknya dua kali jumlah perangkat penyimpanan yang diperlukan untuk menyimpan semua data klien yang tersimpan. Itu karena perangkat ini, seperti semua komputer, kadang-kadang rusak. Sebuah sistem cloud computing harus membuat salinan semua data klien dan menyimpannya pada perangkat lain. Membuat salinan data sebagai cadangan disebut redundancy.

Aplikasi Cloud Computing
Penerapan cloud computing secara praktis adalah tak terbatas. Dengan middleware yang tepat, sistem cloud computing bisa mengeksekusi semua program seperti sebuah normal komputer bekerja. Secara potensial, segala sesuatu mulai dari perangkat lunak pengolah kata yang umum untuk program komputer yang dirancang khusus untuk sebuah perusahaan tertentu bisa bekerja pada sistem cloud computing.
Mengapa orang-orang ingin mengandalkan sistem dari komputer lain untuk menjalankan program dan menyimpan data? Berikut adalah beberapa alasannya:
Klien akan dapat mengakses aplikasi dan data dari mana saja setiap saat. Mereka bisa mengakses sistem cloud computing menggunakan komputer yang terhubung ke Internet. Data tidak terbatas pada hard drive di komputer satu pengguna saja atau di jaringan internal suatu perusahaan.
Ini bisa membuat biaya hardware turun. Sistem cloud computing akan mengurangi kebutuhan akan hardware canggih pada sisi klien. Anda tidak perlu membeli komputer tercepat dengan memori besar, karena sistem “cloud” akan mengurus kebutuhan tersebut bagi Anda. Sebaliknya, Anda bisa membeli sebuah terminal komputer murah. Terminal ini  bisa mencakup monitor, perangkat input seperti keyboard dan mouse, dan cukup kekuatan prosesor untuk menjalankan middleware yang diperlukan untuk terhubung ke sistem “cloud”. Anda tidak akan membutuhkan hard drive dengan kapasitas besar karena Anda akan menyimpan semua informasi Anda pada komputer remote.
Perusahaan yang mengandalkan komputer harus memastikan bahwa mereka memiliki software yang tepat untuk diterapkan guna mencapai tujuan. Sistem cloud computing memberikan organisasi-organisasi tersebut akses seluruh perusahaan ke aplikasi komputer. Perusahaan tidak perlu membeli satu set perangkat lunak atau lisensi perangkat lunak untuk setiap karyawan. Sebaliknya, perusahaan bisa membayar biaya meteran ke perusahaan cloud computing.
Server dan perangkat penyimpanan data digital memakan tempat. Beberapa perusahaan menyewa ruang fisik untuk menyimpan server dan database karena mereka tidak memiliki ruangan tersebut di kantor mereka. Cloud computing memberikan perusahaan-perusahaan pilihan untuk menyimpan data pada hardware orang lain, menghilangkan kebutuhan untuk ruang fisik di front end.
Perusahaan bisa menghemat uang untuk kebutuhan IT. Efisiensi hardware akan terjadi, secara teori, akan memiliki masalah lebih sedikit daripada jaringan mesin yang heterogen dan sistem operasi.
Jika back end sistem cloud computing adalah sistem komputasi grid, maka klien bisa mengambil keuntungan dari kekuatan pemrosesan seluruh jaringan. Seringkali, para ilmuwan dan peneliti bekerja dengan perhitungan kompleks sehingga butuh waktu tahunan untuk masing-masing komputer untuk menyelesaikan hal tersebut. Pada sistem komputasi grid, klien bisa mengirim perhitungan ke “awan” untuk diproses. Sistem “cloud” akan memanfaatkan kekuatan pengolahan semua komputer yang tersedia di back end, sehingga secara signifikan mempercepat perhitungan.

ANALISA DAN KESIMPULAN
Mungkin kekhawatiran terbesar tentang cloud computing adalah keamanan dan privasi. Ide menyerahkan data penting ke perusahaan lain mengkhawatirkan untuk beberapa orang. Eksekutif perusahaan mungkin ragu untuk mengambil keuntungan dari sistem cloud computing karena mereka tidak dapat menyimpan informasi perusahaan mereka di tempat terkunci.
Argumen kontra untuk posisi ini adalah bahwa perusahaan yang menawarkan layanan cloud computing, hidup dan matinya adalah berdasarkan reputasi mereka. Ini menguntungkan perusahaan-perusahaan untuk memiliki langkah-langkah keamanan yang handal pada tempatnya. Jika tidak, layanan tersebut akan kehilangan semua klien. Hal itu dalam kepentingan mereka untuk menggunakan teknik yang paling canggih untuk melindungi data klien mereka.
Privasi adalah hal lain. Jika klien dapat login dari lokasi manapun untuk mengakses data dan aplikasi, mungkin privasi klien bisa dikompromikan. Perusahaan cloud computing harus mencari cara untuk melindungi privasi klien mereka. Salah satu cara adalah dengan menggunakan teknik otentikasi seperti nama pengguna dan password. Lain adalah dengan menggunakan format otorisasi – setiap pengguna hanya dapat mengakses data dan aplikasi yang relevan dengannya atau pekerjaannya.

Jadi Could Computing itu adalah penyedia layanan dan kita adalah user/ pemakai dari layanan tersebut. Kita tidak perlu pusing memikirkan bagaimana mereka (penyedia layananan Cloud Computing ) menyedikan layanan tersebut, yang penting mereka bisa memberikan standar layanan sesuai dengan apa yang kita butuhkan. Untuk biaya layanan kita tinggal bayar berdasarkan pemakaian, walaupun ada juga penyedia layananan yang menggratiskan layanan-nya. Saat kita butuh tambahan layanan, kita bisa meminta segera penambahan layanan tersebut, dan juga sebaliknya (ELASTIS ).

Cloud Computing juga merupakan abstraksi dari infrastruktur kompleks yang disembunyikannya. Ia adalah suatu metoda komputasi di mana kapabilitas terkait teknologi informasi disajikan sebagai suatu layanan (as a service), sehingga pengguna dapat mengaksesnya lewat Internet ("di dalam awan") tanpa mengetahui apa yang ada didalamnya, ahli dengannya, atau memiliki kendali terhadap infrastruktur teknologi yang membantunya.
Cloud Computing adalah suatu paradigma di mana informasi secara permanen tersimpan di server di internet dan tersimpan secara sementara di komputer pengguna (client)


REFERENSI







Pemrograman Jaringan : Datagram Socket


Datagram Socket

Pada sistem operasi linux ada banyak socket, tetapi ada dua yang paling utama yaitu stream socket dan datagram socket. disini saya akan menjelaskan mengenai datagram socket yang disebut juga connectionless socket sebab untuk interaksi client-server tidak harus selalu terhubung terus menerus. Jika client mengirimkan data ke server, data tersebut ada kemungkinan sampai ke server atau tidak. Untuk itu client menunggu sinyal ‘error free’ dari client. Jika client tidak menerima sinyal ‘error free’ dalam suatu kurun waktu, maka client akan mengirimkan lagi data tersebut. Contoh aplikasi yang menggunakan datagram socket adalah tftp dan bootp.

Berikut contoh program client server yang menggunakan datagram socket yang dibuat dengan bahasa C.
  • Client
/*
** client02.c -- a datagram
*/

#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 // 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;
}

Berikut penjelasan dari program client:

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 <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 // 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;
}

Berikut penjelasan dari program server:

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:
  1. Simpan source program client dengan nama client2.c dan server dengan nama server2.c
  2. Lakukan installasi gcc yang sudah dijelaskan pada artikel sebelumnya.
  3. Lakukan kompilasi pada program.
    #gcc client2.c -o client2
    #gcc server2.c -o server2
    
  4. Jalankan program server, kemudian jalankan program client pada komputer client.
    #./server2
    #./client2 <alamat ip server> <pesan tanpa spasi/dalam tanda kutip>
    

Berikut tampilan outputnya:
  • Client
  • Server

Mengecek port yang digunakan oler server dengan menggunakan perintah berikut:
# netstat -nlptu | grep server2

Berikut tampilan outputnya:


Dari output tersebut dapat terlihat bahwa program server melakukan listening menggunakan port 4950 dan menggunakan protokol udp.

Selanjutnya mengecek port yang digunakan oleh client dengan menggunakan perintah berikut:
# tcpdump -nt -i (interface yang digunakan)

Berikut tampilan outputnya:


Dari output tersebut terlihat bahwa program client menggunakan port 53341 yang merupakan random port apabila program client dijalankan kembali maka port yang digunakan akan berubah.


Referensi:
Materi V-Class Gunadarma: Datagram Socket Programming
http://salmaann.blogspot.com/2014/05/program-datagram-socket.html#more

Senin, 26 Mei 2014

Pemrograman Jaringan : Stream Socket

Stream Socket
Socket Stream adalah socket komunikasi full-duplex berbasis aliran (stream) data. Pada model komunikasi Socket Stream, koneksi dua aplikasi harus dalam kondisi tersambung dengan benar untuk dapat bertukar data. Ini dapat dianalogikan seperti komunikasi telepon. Jika sambungan telepon di salah satu titik putus, maka komunikasi tidak dapat terjadi. Koneksi model seperti ini akan menjamin data dapat dipertukarkan dengan baik, namun memiliki kelemahan dalam hal penggunaan jalur data yang relatif besar dan tidak boleh terputus. Berikut contoh program client server yang menggunakan stream socket yang dibuat dengan bahasa C.

  • 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 //nomor port yang digunakan
#define BACKLOG 10 //jumlah koneksi yang diperbolehkan

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

int main(void)
{
    int sockfd, new_fd; //membuat dan mempertahankan koneksi
    struct sockaddr_in my_addr; //ip address server
    struct sockaddr_in their_addr; //ip address client
    int sin_size;
    struct sigaction sa;
    int yes=1;

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

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

    my_addr.sin_family = AF_INET; //host byte order atau big endian
    my_addr.sin_port = htons(MYPORT); //short, network byte order
    my_addr.sin_addr.s_addr = INADDR_ANY; //diisi dengan ip address server
    memset(&(my_addr.sin_zero), '\0', 8);

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

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

    sa.sa_handler = sigchld_handler; //menghander dead process
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = SA_RESTART;

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

    while(1) //menerima koneksi dengan looping
    {
        sin_size = sizeof(struct sockaddr_in);

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

        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", 14, 0) == -1)
            {
                perror("send");
            }

            close(new_fd); //menutup proses
            exit(0);
        }

        close(new_fd);
    }

    return 0;

}

  • 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 //nomor port yang digunakan
#define MAXDATASIZE 100 //jumlah bytes yang dapat dikirimkan

int main(int argc, char const *argv[])
{
    int sockfd, numbytes;
    char buf[MAXDATASIZE];
    struct hostent *he;
    struct sockaddr_in their_addr; //informasi alamat server

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

    if ((he=gethostbyname(argv[1])) == NULL) //mencari informasi tentang host
    {
        perror("gethostbyname");
        exit(1);
    }

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

    their_addr.sin_family = AF_INET; //host byte order
    their_addr.sin_port = htons(PORT); //short, network byte order
    their_addr.sin_addr = *((struct in_addr *)he->h_addr);
    memset(&(their_addr.sin_zero), '\0', 8);

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

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

    buf[numbytes] = '\0';
    printf("Received: %s", buf);
    close(sockfd);

    return 0;
}

Berikut penjelasan dari program client dan server :

Pada program server, program ini melakukan prosedur pembukaan koneksi yang di dalamnya berupa langkah-langkah seperti membuat socket, mengikat socket, menyiapkan socket, menerima koneksi, dan pengalamatan socket. 

Pada program client program ini membuatkan client ke server pada hostname:port tertentu. Di dalamnya termasuk membuat socket, melakukan pengalamatan ke server dan melakukan koneksi ke server dengan perintah connect().

Langkah-langkah menjalankan program
  1. Simpan program client dengan nama client.c dan program server dengan nama server.c
  2. Lakukan installasi gcc atau compiler untuk bahasa c lainnya (pada artikel ini menggunakan os fedora) 
3.      #yum install gcc
  1. Lakukan kompilasi program
5.      #gcc client.c -o client
6.      #gcc server.c -o server
  1. Jalankan program server, kemudian jalankan program client
8.      #./server
9.      #./client <ip server>

maka  outputnya adalah sebagai berikut :
  • Server


  • Client


Sumber :