Senin, 23 Juni 2014

BIOINFORMATIKA



NAMA                         : Cintya Elsa Triani     
KELAS                        : 4IA19
NPM                            : 51410597
ALAMAT BLOG         : smartwomenn.blogspot.com
DOSEN                        : KUWAT S.
MATERI                      : BIOINFORMATIKA

----------------------------------------------------------------------------------------------------


BAB I
PENDAHULUAN

1.1 Latar Belakang

            Bioinformatika merupakan aplikasi dari disiplin beberapa disiplin ilmu yaitu biologi, biokimia, matematika dan komputasi. Bioinformatika menggunakan teknologi computer dan metode statistika untuk mengelompokkkan dan menganalisa besarnya data biologi seperti DNA, RNA, rangkaian protein, struktur protein, riwayat gen dan interaksi protein. Perkembangan bioinformatika diawali dengan kemajuan teknik biologi molekuler dalam mengungkap sequence biologi protein (sejak awal 1950an) dan asam nukleat (sejak 1960an) mengawali perkembangan pangkalan data dan teknik analisis sequence biologi. Pangkalan data sequence protein mulai dikembangkan pada tahun 1960an di Amerika Serikat, sementara pangkalan data sequence DNA dikembangkan pada akhir 1970an di Amerika Serikat dan Jerman pada Laboratorium Biologi Molekuler Eropa (European Molecular Biology Laboratory). Asam deoksiribonukleat (deoxyribonucleic acid), atau biasa disebut DNA, adalah biomolekul yang berupa asam nukleat (terdapat dalam inti sel atau nucleus), yang berfungsi untuk menyimpan informasi genetik pada suatu organisme. DNA berbentuk untai ganda (double helix) yang disatukan oleh ikatan hidrogen antara basa-basa di dalam kedua untai
tersebut. Basa-basa tersebut adalah Adenin (A), Sitosin (C), Guanin (G), dan Timin (T). Adenin berikatan dengan Timin, dan Sitosin berikatan dengan Guanin. DNA dapat melakukan replikasi DNA, di mana ketika replikasi DNA

BAB II
ISI PEBAHASAN

2.2 Perkembangan Bioinformatika

            Studi Bioinformatika mulai tumbuh sebagai akibat dari perkembangan berbagai metode sekuens baru yang menghasilka data yang sangat banyak. Hal tersebut, secara kebetulan, didukung pula oleh teknologi penyimpanan, manajemen, dan pertukaran data melalui komputer. Inovasi dalam pemetaan dan sekuensing memiliki peran penting dalam proses pengambilan data biologis. Penggunaan Yeast Artificial Chromosome (YAC), sangat membantu dalam konstruksi peta fisik genom kompleks secara lengkap (Touchmann & Green, 1998). Untuk mengklon fragmen-fragmen DNA besar (sekitar 150.000 pasangan basa) digunakan bacterial Artificial Chromosome (BAC).

            Kemungkinan, teknologi yang paling banyak kontribusinya adalah teknologi PCR. Walaupun tergolong tua (PCR ditemukan tahun 1985), meode ini sangat efektif, dan telah mengalami penyempurnaan selama bertahun-tahun.

            Perkembangan teknologi sekuensing dimulai dan semi-automatic sequencer yang pertama pada tahun 1987, dilanjutkan dengan Taq Cycle sequencing pada tahun 1990. Pelabelan Flourescen fragmen DNA dengan Sanger dideoxy Chain Termination Method, merupakan dasar bagi proyek sekuensing skala besar (Venter et. al., 199).

            Seluruh perkembangan tersebut sia-sia saja tanpa obyek yang diteliti, yang memiliki nilai komersil tinggi dan data yang berlimpah. Gampang ditebak, pasti Manusia melalui Human Genome Project.

            Selain perkembangan dalam bidang Genomik, Bioinformatika sangat dipengaruhi oleh perkembangan di bidang teknologi informasi dan komputer.

            Pada fase awal (sekitar tahun 80-an) perkembangan yang paling signifikan adalah kapasitas penyimpanan data. Dari hanya baeberapa puluh byte (1980), hingga mencapai Terabyte (1 terabyte=1 trilyun byte),

            Setelah pembuatan database, selanjutnya dimulai perkembangan pemuatan perangkat lunak untuk mengolah data. Awalnya, metode yang digunakan hanya pencariaan kata kunci, dan kalimat pendek. perkembangan selanjutnya berupa perangkat lunak dengan algoritma yang lebih kompleks, seperti penyandian nukleotida, menjadi asam-asam amino, kemudian membuat struktur proteinnya.

            Saat ini, perangkat lunak yang tersedia meliputi pembacaan sekuens nukleotida dari gel elektroforesis, prediksi kode protein, identifikasi primer, perbandingan sekuens, analisis kekerabatan, pengenalan pola dan prediksi struktur. Dengan perkembangan seperti diatas, ternyata masih belum cukup. Kurangnya pemahaman terhadap sistem biologis dan organisasi molekular membua analisis sekuens masih mengalami kesulitan. Perbandingan sekuens antar spesies masih sulit akibat variabilitas DNA.

            Usaha yang dilakukan saat ini, baru mencoba mempelajari eori-teori tersebut melalui proses inferensi, penyesuaian model, dan belajar dari contoh yang tersedia (Baldi & Brunac, 1998).

            Perkembangan perangkat keras komputer juga berperan sangat penting. Kecepatan prosesor, kapasitas RAM, dan kartu grafik merupakan salah satu pendorong majunya bioinformatika.

            Terakhir perkembangan bioinformatika sangat dipengaruhi oleh pertumbuhan jaringan Internet. Mulai dari e-mail, FTP, Telnet (1980-an), Gopher, WAIS, hingga ditemukannya World Wide Web oleh Tim Berners-Lee pada tahun 1990, mendukung kemudahan transfer data yang cepat dan mudah. Saat ini, telah tersedia sekitar 400 database biologis yang dapat diakses melalui internet.

2.2 Bidang-Bidang yang Terkait dengan Bioinformatika :

a.Biophysics
Biologi molekul sendiri merupakan pengembangan yang lahir dari biophysics. Biophysics adalah sebuah bidang interdisipliner yang mengaplikasikan teknik- teknik dari ilmu Fisika untuk memahami struktur dan fungsi biologi (British Biophysical Society). Sesuai dengan definisi di atas, bidang ini merupakan suatu bidang yang luas. Namun secara langsung disiplin ilmu ini terkait dengan Bioinformatika karena penggunaan teknik-teknik dari ilmu Fisika untuk memahami struktur membutuhkan penggunaan TI.

b.Computational Biology
Computational biology merupakan bagian dari Bioinformatika (dalam arti yang paling luas) yang paling dekat dengan bidang Biologi umum klasik. Fokus dari computational biology adalah gerak evolusi, populasi, dan biologi teoritis daripada biomedis dalam molekul dan sel. Tak dapat dielakkan bahwa Biologi Molekul cukup penting dalam computational biology, namun itu bukanlah inti dari disiplin ilmu ini. Pada penerapan computational biology, model-model statistika untuk fenomena biologi lebih disukai dipakai dibandingkan dengan model sebenarnya. 

Dalam beberapa hal cara tersebut cukup baik mengingat pada kasus tertentu eksperimen langsung pada fenomena biologi cukup sulit. Tidak semua dari computational biology merupakan Bioinformatika, seperti contohnya Model Matematika bukan merupakan Bioinformatika, bahkan meskipun dikaitkan dengan masalah biologi.

c.Cheminformatics
Cheminformatics adalah kombinasi dari sintesis kimia, penyaringan biologis, dan pendekatan data-mining yang digunakan untuk penemuan dan pengembangan obat (Cambridge Healthech Institute’s Sixth Annual Cheminformatics conference). Pengertian disiplin ilmu yang disebutkan di atas lebih merupakan identifikasi dari salah satu aktivitas yang paling populer dibandingkan dengan berbagai bidang studi yang mungkin ada di bawah bidang ini.

Salah satu contoh penemuan obat yang paling sukses sepanjang sejarah adalah penisilin, dapat menggambarkan cara untuk menemukan dan mengembangkan obatobatan hingga sekarang –meskipun terlihat aneh–. Cara untuk menemukan dan mengembangkan obat adalah hasil dari kesempatan, observasi, dan banyak proses kimia yang intensif dan lambat. Sampai beberapa waktu yang lalu, disain obat dianggap harus selalu menggunakan kerja yang intensif, proses uji dan gagal (trial-error process).

Kemungkinan penggunaan TI untuk merencanakan secara cerdas dan dengan mengotomatiskan proses-proses yang terkait dengan sintesis kimiawi dari komponen-komponen pengobatan merupakan suatu prospek yang sangat menarik bagi ahli kimia dan ahli biokimia. Penghargaan untuk menghasilkan obat yang dapat dipasarkan secara lebih cepat sangatlah besar, sehingga target inilah yang merupakan inti dari cheminformatics.
Ruang lingkup akademis dari cheminformatics ini sangat luas. Contoh bidang minatnya antara lain: Synthesis Planning, Reaction and Structure Retrieval, 3-D Structure Retrieval, Modelling, Computational Chemistry, Visualisation Tools and Utilities.

d.Genomics
Genomics adalah bidang ilmu yang ada sebelum selesainya sekuen genom, kecuali dalam bentuk yang paling kasar. Genomics adalah setiap usaha untuk menganalisa atau membandingkan seluruh komplemen genetik dari satu spesies atau lebih. Secara logis tentu saja mungkin untuk membandingkan genom-genom dengan membandingkan kurang lebih suatu himpunan bagian dari gen di dalam genom yang representatif.

g.Mathematical Biology
Mathematical biology lebih mudah dibedakan dengan Bioinformatika daripada computational biology dengan Bioinformatika. Mathematical biology juga menangani masalah-masalah biologi, namun metode yang digunakan untuk menangani masalah tersebut tidak perlu secara numerik dan tidak perlu diimplementasikan dalam software maupun hardware. Bahkan metode yang dipakai tidak perlu “menyelesaikan” masalah apapun; dalam mathematical biology bisa dianggap beralasan untuk mempublikasikan sebuah hasil yang hanya menyatakan bahwa suatu masalah biologi berada pada kelas umum tertentu. 

Istilah proteomics pertama kali digunakan untuk menggambarkan himpunan dari protein-protein yang tersusun (encoded) oleh genom. Ilmu yang mempelajari proteome, yang disebut proteomics, pada saat ini tidak hanya memperhatikan semua protein di dalam sel yang diberikan, tetapi juga himpunan dari semua bentuk isoform dan modifikasi dari semua protein, interaksi diantaranya, deskripsi struktural dari proteinprotein dan kompleks-kompleks orde tingkat tinggi dari protein, dan mengenai masalah tersebut hampir semua pasca genom. 



h.Pharmacogenomics
Pharmacogenomics adalah aplikasi dari pendekatan genomik dan teknologi pada identifikasi dari target-target obat. Contohnya meliputi menjaring semua genom untuk penerima yang potensial dengan menggunakan cara Bioinformatika, atau dengan menyelidiki bentuk pola dari ekspresi gen di dalam baik patogen maupun induk selama terjadinya infeksi, atau maupun dengan memeriksa karakteristik pola-pola ekspresi yang ditemukan dalam tumor atau contoh dari pasien untuk kepentingan diagnosa (kemungkinan untuk mengejar target potensial terapi kanker). 

Istilah pharmacogenomics digunakan lebih untuk urusan yang lebih “trivial” — tetapi dapat diargumentasikan lebih berguna– dari aplikasi pendekatan Bioinformatika pada pengkatalogan dan pemrosesan informasi yang berkaitan dengan ilmu Farmasi dan Genetika, untuk contohnya adalah pengumpulan informasi pasien dalam database.

i.Pharmacogenetics
Tiap individu mempunyai respon yang berbeda-beda terhadap berbagai pengaruh obat; sebagian ada yang positif, sebagian ada yang sedikit perubahan yang tampak pada kondisi mereka dan ada juga yang mendapatkan efek samping atau reaksi alergi. Sebagian dari reaksi-reaksi ini diketahui mempunyai dasar genetik. Pharmacogenetics adalah bagian dari pharmacogenomics yang menggunakan metode genomik/Bioinformatika untuk mengidentifikasi hubungan-hubungan genomik, contohnya SNP (Single Nucleotide Polymorphisms), karakteristik dari profil respons pasien tertentu dan menggunakan informasi-informasi tersebut untuk memberitahu administrasi dan pengembangan terapi pengobatan. 

Secara menakjubkan pendekatan tersebut telah digunakan untuk “menghidupkan kembali” obat-obatan yang sebelumnya dianggap tidak efektif, namun ternyata diketahui manjur pada sekelompok pasien tertentu. Disiplin ilmu ini juga dapat digunakan untuk mengoptimalkan dosis kemoterapi pada pasien-pasien tertentu. Gambaran dari sebagian bidang-bidang yang terkait dengan Bioinformatika di atas memperlihatkan bahwa Bioinformatika mempunyai ruang lingkup yang sangat luas dan mempunyai peran yang sangat besar dalam bidangnya. Bahkan pada bidang pelayanan kesehatan Bioinformatika menimbulkan disiplin ilmu baru yang menyebabkan peningkatan pelayanan kesehatan.

BAB III
ANALISA

3.1 Potensi dan Aplikasi Bioinformatika

Potensi komersial dari aplikasi bioinformatika sangat menggiurkan. Pada tahun 1998 saja, pangsa pasarnya mencapai sekitar $290 juta, dan diperkirakan akan mencapai $2 milyar pada tahun 2005.

Selama bulan Maret tahun 2000 investasi pada bidang ini sedikitberkurang. Hal tersebut disebabkan oleh pernyataan Presiden AS Bill Clinton dan PM Inggris Tony Blair, yang membebaskan akses terhadap informasi genom manusia sehingga dianggap menghalangi paten terhadap genom manusia. Tapi, pada akhir bulan, investasi mulai kembali normal karena bioinformatika masih dianggap cukup prospektif di masa depan.

Menurut laporan Ventureone di Amerika Serikat pada tahun 2001 dana-dana ventura telah mencapai $700 juta digunakan untuk pengembangan bioinformatika.

Sementara itu, kepala Divisi Teknologi Khusus untuk Bioinformatika yang pertama di Microsoft menganggap, ini adalah peluang yang amat besar. Penjualan komputer untuk ilmuwan-ilmuwan akan mencapai $43 juta.

3.2 Aplikasi BioInformatika

1.Transformasi sekuen menjadi informasi genetik.

Intinya adalah menjual data, dalam bentuk gen komplit, atau fragmen, yang dapat digunakan oleh pihak lain untuk mencari potensi terhadap gen tersebut.

2.Pasien sebagai komoditas

Pasien dengan kecenderungan terhadap penyakit tertentu dapat diketahui, sehingga mudah sekali bagi perusahaan oba untuk menawarkan produknya.

3.Mencari potensi gen

Potensi dari sebuah gen sangat beragam, bergantung pada ekspresi gen tersebut. Aplikasi lebih lanjut dapat berupa transgenik, terapi genetik, atau berbagai rekayasa dan pemanfaatan geneik lainnya.

3.3 Permasalahan dan tantangan yang dihadapi

            Perkembangan yang sedemikian pesat menghasilkan berbagai teknik dan perangkat baru dalam melakukan manajemen dan analisis data. Karena beragamnya teknik dan perangkat tersebut, terjadi kesulitan dalam perbandingan, penyimpanan, dan analisis data dari berbagai platform (Ladd, 2000).

            Usaha standarisasi sedang dilakukan belakangan ini. Salah satu usaha standarisasi yang paling terkenal adalah BioStandard Project yang dilakukan oleh European Bioinformatics Institute (Cambridge, UK). Proyek ini didanai oleh European Bioinformatics Institute, The European Commission, dan beberapa perusahaan farmasi. Dalam proyek tersebut, dilakukan pengembangan perangkat lunak pengolah data yang sesuai dengan standar saat ini maupun masa depan (Murray-Rust, 1994)

            Selain standarisasi, bioinformatika juga memiliki masalah lain, yaitu pengolahan data. Saat ini, data yang berhasil dikumpulkan saat ini, sehingga membutuhkan waktu yang sangat lama untuk dianalisis.

            Data dasar yang diperoleh dari data genomik hanya berupa sekumpulan simbol A, G, T, dan C yang jumlahnya mencapai milyaran bahkan trilyunan. Kesulitannya adalah bagaimana merubah simbol tersebut menjadi -misalnya- gen penyakit asma. Proses menganalisis data genomik menjadi informasi yang dapat dimengerti biasa disebut Data Mining.

            Dalam proses Data Mining digunakan teknologi pengenalan pola (Pattern Recognition Technology) dan analisis statistika untuk mengolah data dalam jumlah banyak (Wedin, 1999). Tujuan dari Data mining adalah untuk mencari korelasi baru, pola, dan trend.

            Permasalahan lain pun muncul menghadang. Sebagai disiplin ilmu yang baru terbentuk, bioinformatika kekurangan SDM yang kompeten. Hal tersebut dijelaskan oleh Craig Benham, seorang Profesor pada sekolah kedokteran Mount Sinai di New York. Ia mengajar bioinformatika aplikasi teknologi informasi. Seperti dijelaskan Benham, ia pada tahun 2000-2001 tidak memiliki murid di program pasca sarjananya. Padahal, diprediksikan bidang ini membutuhkan sekitar 20.000 tenaga kerja terlatih yang kompeten dalam bidang biologi sekaligus ilmu komputer.

            Bagaimana dengan Indonesia? Saat ini, jarang sekali (adakah?) orang yang kompeten dalam bidang biologi sekaligus dalam bidang ilmu komputer. Walaupun ada, karena terbatasnya sarana, mungkin akan sulit bagi orang tersebut untuk mengekspresikan kemampuannya. Padahal sebagai negara Mega Diversity Indonesia menjadi sasaran bagi para peneliti asing. Saat ini, sedang berlangsung perlombaan untuk mendapatkan paten terhadap data keanekaragaman gen untuk kepentingan komersial. Akankah kita membeli harta sendiri di masa depan?.

BAB IV
KESIMPULAN

BioInformatika suatu perpaduan antara ilmu biologi dan teknologi informasi. Bioinformatika merupakan manajemen dan analisis informasi biologis yang disimpan dalam suatu database. Jadi Bidang-Bidang yang terkait dengan BioInformatika ada 7 bidang, diantaranya :
1. Biophysics
2. Computational Biology
3. Cheminformatics
4. Genomics
5. Mathematical Biology
6. Pharmacogenomics
7. Pharmacogenetics

DAFTAR PUSTAKA
4.http://himbioui1.tripod.com/bioinformatika.html

Selasa, 03 Juni 2014

Program Datagram Socket

Program Datagram Socket

Pada sistem operasi linux ada banyak socket, tetapi ada dua yang paling utama yaitu stream socket dan datagram socket. Stream socket digunakan untuk sistem komunikasi dua arah dan menggunakan protokol TCP (Transmission Control Protocol). Pembahasan mengenai Stream Socket dan implementasinya sudah dibahas pada artikel sebelumnya, Contoh aplikasi yang menggunakan stream socket adalah telnet dan HTTP (web browser). TCP menjamin data terkirim secara urut dan bebas dari error, sedangkan IP (Internet Protocol) bertugas untuk mengatur lalu-lintas routing.

Jenis socket yang kedua yaitu datagram socket 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

    Program Stream Socket

    Program Stream Socket

    Socket adalah mekanisme komunikasi yang memungkinkan terjadinya pertukaran data antar program atau proses baik dalam satu mesin maupun antar mesin. Gaya pemrograman soket sendiri berawal dari sistem Unix BSD yang terkenal dengan kepeloporannya pada bidang penanganan jaringan, sehingga sering disebut BSD Socket.

    Sedangkan 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.
    • 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:
      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().
      • 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;
        
        }


        Berikut penjelasan dari program 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. 

        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) 
          #yum install gcc
          
        3. Lakukan kompilasi program
          #gcc client.c -o client
          #gcc server.c -o server
          
        4. Jalankan program server, kemudian jalankan program client
          #./server
          #./client <ip server>
          

        Berikut tampilan outputnya
      • Server
      • ClientReferensi:Materi V-Class Gunadarma: Stream Socket Programming
     
    Copyright (c) 2010 CET and Powered by Blogger.