komputek-anime.blogspot.com Yondaime Images Wallpaper Hitsugaya ban-kai Images Wallpaper Naruto And Kyuubi Wallpaper Kakashi Cape Wallpaper Anbu Kakashi Wallpaper Uchiha Madara Wallpaper Grimmjaw Sixth Espada Wallpaper Kuchiki Byakuya-searching For Purpose Wallpaper

Sabtu, 31 Mei 2014

ALGORITMA PARALEL

UNIVERSITAS GUNADARMA
FAKULTAS TEKNOLOGI INDUSTRI
LogoGunadarma.jpg
                              MAKALAH TUGAS ALGORITMA PARALEL



Nama                          :  Mustika Ningrum 54410874

Jurusan                      : Teknik Informatika

                        Kelas                           :  4ia19
                        Tugas                          :  Softkill ke 2
Dosen                          :  Kuwat Setiyanto
                       


Diajukan Guna Melengkapi Sebagian Syarat
UNTUK MENCAPAI JENJANG SETARA SARJANA MUDA

Universitas Gunadarma
2014






BAB I
PENDAHULUAN

              1.1     LATAR BELAKANG
Pada algoritma ini, setiap proses tidak membutuhkan sinkronisasi dan komunikasi antar proses. Meskipun prosesor mengakses data yang sama, setiap prosesor dapat melakukan komputasi sendiri tanpa tergantung pada data antara yang dihasilkan oleh proses lain. Contoh algoritma relaksasi adalah algoritma perkalian matrik, pengurutan dengan mengunakan metode ranksort dan lain sebagainya maka dari itu dibutuhkan penyelesain yang koknrit yaitu dengan melakukan pemecahan masalah dengan Algoritma Paralel adalah sebuah algoritma yang dapat dieksekusi sepotong pada waktu pada banyak perangkat pengolahan yang berbeda, dan kemudian digabungkan bersama-sama lagi pada akhir untuk mendapatkan hasil yang benar. Algoritma paralel berharga karena perbaikan substansial dalam multiprocessing sistem dan munculnya multi-core prosesor. Secara umum, lebih mudah untuk membangun komputer dengan prosesor cepat tunggal dari satu dengan banyak prosesor lambat dengan sama throughput yang . Tapi kecepatan prosesor meningkat terutama dengan mengecilkan sirkuit, dan prosesor modern yang mendorong ukuran fisik dan batas panas. Hambatan kembar telah membalik persamaan, membuat multiprocessing praktis bahkan untuk sistem kecil. Biaya atau kompleksitas algoritma serial diperkirakan dalam hal ruang (memori) dan waktu (siklus prosesor) yang mereka ambil. Algoritma paralel perlu mengoptimalkan satu sumber daya yang lebih, komunikasi antara prosesor yang berbeda. Ada dua cara paralel prosesor berkomunikasi, memori bersama atau pesan lewat.
1.2       TUJUAN UTAMA
Tujuan utama dari pemrograman paralel adalah untuk meningkatkan performa komputasi. Semakin banyak hal yang bisa dilakukan secara bersamaan (dalam waktu yang sama), semakin banyak pekerjaan yang bisa diselesaikan. Analogi yang paling gampang adalah, bila anda dapat merebus air sambil memotong-motong bawang saat anda akan memasak, waktu yang anda butuhkan akan lebih sedikit dibandingkan bila anda mengerjakan hal tersebut secara berurutan (serial). Atau waktu yg anda butuhkan memotong bawang akan lebih sedikit jika anda kerjakan berdua.
Performa dalam pemrograman paralel diukur dari berapa banyak peningkatan kecepatan (speed up) yang diperoleh dalam menggunakan tehnik paralel. Secara informal, bila anda memotong bawang sendirian membutuhkan waktu 1 jam dan dengan bantuan teman, berdua anda bisa melakukannya dalam 1/2 jam maka anda memperoleh peningkatan kecepatan sebanyak 2 kali.

1.1.1.      TEORI
Pemrograman paralel adalah teknik pemrograman komputer yang memungkinkan eksekusi perintah/operasi secara bersamaan (komputasi paralel), baik dalam komputer dengan satu (prosesor tunggal) ataupun banyak (prosesor ganda dengan mesin paralel) CPU. Bila komputer yang digunakan secara bersamaan tersebut dilakukan oleh komputer-komputer terpisah yang terhubung dalam suatu jaringan komputer lebih sering istilah yang digunakan adalah sistem terdistribusi(distributed computing).Komputasi paralel adalah salah satu teknik melakukan komputasi secara bersamaan dengan memanfaatkan beberapakomputer independen secara bersamaan. Ini umumnya diperlukan saat kapasitas yang diperlukan sangat besar, baik karena harus mengolah data dalam jumlah besar (di industri keuangan, bioinformatika, dll) ataupun karena tuntutan proses komputasi yang banyak. Kasus kedua umum ditemui di kalkulasi numerik untukmenyelesaikan persamaanmatematis dibidang fisika (fisikakomputasi), kimia (kimia komputasi) dll. Untuk melakukan aneka jenis komputasi paralel ini diperlukan infrastruktur mesin paralel yang terdiri dari banyak komputeryang dihubungkan dengan jaringan dan mampu bekerja secara paralel untuk menyelesaikan satu masalah. Untuk itu diperlukan aneka perangkat lunak pendukung yang biasa disebut sebagai middleware yang berperan untuk mengatur distribusi pekerjaan antar node dalam satu mesin paralel. Selanjutnya pemakai harus membuat pemrograman paralel untuk merealisasikan komputasi. 
1.1.2.   Desain & Analisis

SISD Single Instruction stream, Single Data Stream istilah yang mengacu pada arsitektur komputer di mana prosesor tunggal, sebuah uniprocessor, mengeksekusi aliran instruksi tunggal, untuk beroperasi pada data yang tersimpan dalam memori tunggal. Ini sesuai dengan arsitektur von Neumann . SISD adalah salah satu dari empat klasifikasi utama sebagaimana didefinisikan dalam taksonomi Flynn . Dalam sistem ini klasifikasi didasarkan pada jumlah instruksi bersamaan dan data stream hadir dalam arsitektur komputer. Menurut Michael J. Flynn , SISD dapat memiliki karakteristik pemrosesan konkuren. Instruksi fetching dan eksekusi pipelined instruksi adalah contoh umum ditemukan di komputer SISD paling modern.
File: SISD.svg
MISD Multiple Instruction Stream, Single Data Stream jenis komputasi paralel arsitektur di mana banyak unit fungsional melakukan operasi yang berbeda pada data yang sama. Pipa arsitektur termasuk tipe ini, meskipun purist mungkin mengatakan bahwa data berbeda setelah pengolahan oleh setiap tahap dalam pipa. Komputer toleransi kegagalan mengeksekusi instruksi yang sama secara berlebihan dalam rangka untuk mendeteksi dan masker kesalahan, dengan cara yang dikenal sebagai replikasi tugas , dapat dianggap milik jenis ini. Tidak banyak contoh arsitektur ini ada, sebagai MIMD dan SIMD sering lebih tepat untuk data teknik paralel umum. Secara khusus, mereka memungkinkan skala yang lebih baik dan penggunaan sumber daya komputasi daripada MISD tidak. Namun, salah satu contoh yang menonjol dari MISD dalam komputasi adalah Space Shuttle komputer kontrol penerbangan.
File: MISD.svg
SIMD Single Instruction Stream, Multiple Data Stream Kelas komputer paralel dalam taksonomi Flynn . Ini menggambarkan komputer dengan beberapa elemen pemrosesan yang melakukan operasi yang sama pada beberapa titik data secara bersamaan. Dengan demikian, mesin tersebut memanfaatkan data tingkat paralelisme . SIMD ini terutama berlaku untuk tugas umum seperti menyesuaikan kontras dalam citra digital atau menyesuaikan volume audio digital . Paling modern CPU desain termasuk instruksi SIMD dalam rangka meningkatkan kinerja multimedia digunakan.
Keuntungan SIMD antara lain sebuah aplikasi yang dapat mengambil keuntungan dari SIMD adalah salah satu di mana nilai yang sama sedang ditambahkan ke (atau dikurangkan dari) sejumlah besar titik data, operasi umum di banyak multimedia aplikasi. Salah satu contoh akan mengubah kecerahan gambar. Setiap pixel dari suatu gambar terdiri dari tiga nilai untuk kecerahan warna merah (R), hijau (G) dan biru (B) bagian warna. Untuk mengubah kecerahan, nilai-nilai R, G dan B yang dibaca dari memori, nilai yang ditambahkan dengan (atau dikurangi dari) mereka, dan nilai-nilai yang dihasilkan ditulis kembali ke memori.
Dengan prosesor SIMD ada dua perbaikan proses ini. Untuk satu data dipahami dalam bentuk balok, dan sejumlah nilai-nilai dapat dimuat sekaligus. Alih-alih serangkaian instruksi mengatakan “mendapatkan pixel ini, sekarang mendapatkan pixel berikutnya”, prosesor SIMD akan memiliki instruksi tunggal yang efektif mengatakan “mendapatkan n piksel” (dimana n adalah angka yang bervariasi dari desain untuk desain). Untuk berbagai alasan, ini bisa memakan waktu lebih sedikit daripada “mendapatkan” setiap pixel secara individual, seperti desain CPU tradisional.
Keuntungan lain adalah bahwa sistem SIMD biasanya hanya menyertakan instruksi yang dapat diterapkan pada semua data dalam satu operasi. Dengan kata lain, jika sistem SIMD bekerja dengan memuat delapan titik data sekaligus, add operasi yang diterapkan pada data akan terjadi pada semua delapan nilai pada waktu yang sama. Meskipun sama berlaku untuk setiap desain prosesor super-skalar, tingkat paralelisme dalam sistem SIMD biasanya jauh lebih tinggi.
Kekurangannya adalah :
Tidak semua algoritma dapat vectorized. Misalnya, tugas aliran-kontrol-berat seperti kode parsing tidak akan mendapat manfaat dari SIMD.
Ia juga memiliki file-file register besar yang meningkatkan konsumsi daya dan area chip.
Saat ini, menerapkan algoritma dengan instruksi SIMD biasanya membutuhkan tenaga manusia, sebagian besar kompiler tidak menghasilkan instruksi SIMD dari khas C Program, misalnya. vektorisasi dalam kompiler merupakan daerah aktif penelitian ilmu komputer. (Bandingkan pengolahan vektor .)
Pemrograman dengan khusus SIMD set instruksi dapat melibatkan berbagai tantangan tingkat rendah.
SSE (Streaming SIMD Ekstensi) memiliki pembatasan data alignment , programmer akrab dengan arsitektur x86 mungkin tidak mengharapkan ini.
Mengumpulkan data ke dalam register SIMD dan hamburan itu ke lokasi tujuan yang benar adalah rumit dan dapat menjadi tidak efisien.
Instruksi tertentu seperti rotasi atau penambahan tiga operan tidak tersedia dalam beberapa set instruksi SIMD.
Set instruksi adalah arsitektur-spesifik: prosesor lama dan prosesor non-x86 kekurangan SSE seluruhnya, misalnya, jadi programmer harus menyediakan implementasi non-Vectorized (atau implementasi vectorized berbeda) untuk mereka.
Awal MMX set instruksi berbagi register file dengan tumpukan floating-point, yang menyebabkan inefisiensi saat pencampuran kode floating-point dan MMX. Namun, SSE2 mengoreksi ini.

DAFTAR PUSTAKA

Rancangan dan Implementasi Sistem Keamanan pada Parallel Prosessing Komputasi dengan menggunakan PC Cluster, MUSTIKA NINGRUM 54410874
http://www.beritanet.com
http://www.ilmukomputer.com
http://www.lam-mpi.org


.



Program Datagram Socket

Program Datagram Socket
TUGAS JARKOM LANJUT

PENDAHULUAN
Penggunaan socket programming memungkinkan adanya komunikasi antara client dan server. Salah satu contoh sederhana penggunaan socket programming adalah pembuatan program untuk chatting. Program tersebut sebenarnya merupakan bentuk aplikasi berupa komunikasi antara client dan server. Ketika seorang user (client) melakukan koneksi ke chat server, program akan membuka koneksi ke port yang diberikan, sehingga server perlu membuka socket pada port tersebut dan “mendengarkan” koneksi yang datang. Socket sendiri merupakan gabungan antara host-adress dan port adress. Dalam hal ini socket digunakan untuk komunikasi antara client dan server.
Proses datagram Jika client mengirimkan data ke server, data tersebut ada kemungkinan sampai ke server atau tidak. Untuk ituclient menunggu isyarat ‘error free’ daripada client. Jika client tidak menerima isyarat ‘error free’ dalam satu jangka waktu, maka clientakan mengirimkan lagi data tersebut. Contoh aplikasi yang menggunakan datagram socket adalah tftp dan bootp.
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV9RtWUxBs2wVYBL534a8EDUjNcVi6BOzA4RIIodev8JaUCfzFAC2oYfxvF3sudmgMxmv-3kyaYp7I0LJxJczwBTZnVlscXvRb5iMkqHxfFmCRpEyfoquW8ABYAaLd5PzuF3BZUqZfz2M/s320/haizum2.jpg
Data yang dikirimkan melalui datagram socket akan melalui proses yang diberi nama enkapsulasi (data encapsulation). Data yang akan dikirimkan sebelumnya dibungkus dulu dengan sebuah header dari protokol yang pertama (misalnya TFTP), lalu dibungkus lagi dengan protokol berikutnya (misalnya UDP), lalu IP dan yang terakhir dibungkus dengan ethernet protokol pada physical layer.

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvMtMeQxx5EhWckOa1nxGUgRAzuyYNRE7BNW-xI_TMcEcFmmSiv71hWCcujynIDshJV7fEp1CkCbOapwzV29IhSfQ5dS1qsdXaidJL6ph812-dgUl_ovR7Zi7VRLg2OyrNIvCGZUIy3ys/s320/haizum4.jpg

Algorithma pemprograman datagram socket
Pada socket datagram algoritmanya lebih sederhana, tidak memerlukan sambungan antara server dan client. Sehingga system call/function yang diperlukan, iaitu socket(), bind(), sendto() dan recvfrom(), sendto() dan recvfrom() adalah fungsi khusus yang digunakan untuk mengirim dan menerima data pada socket datagram.
Antara langkah – langkah yang dilakukan pada client dan server, pada socket datagram adalah seperti berikut :
1. Langkah – langkah di client :
a. Membuka connection client ke server, yang di dalamnya adalah :
i. Membuat socket dengan perintah socket().
ii. Melakukan pengalamatan ke server.
b. Melakukan komunikasi (mengirimkan data), dengan menggunakan perintah sendto()
c. Menutup hubungan dengan perintah close();

2. Langkah – langkah di server :
a. Membuat socket dengan perintah socket()
b. Mengikatkan socket kepada sebuah alamat network dengan perintah bind()
c. Melakukan komunikasi (menerima data), dengan menggunakan perintah recvfrom()

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:
Simpan source program client dengan nama client2.c dan server dengan nama server2.c
Lakukan installasi gcc yang sudah dijelaskan pada artikel sebelumnya.
Lakukan kompilasi pada program.
#gcc client2.c -o client2
#gcc server2.c -o server2
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
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4e3pPbkaWvlARLVgdPziI6z9hShh3RyddMQEOMOgr1gDCtCuhJCd9sbWWBCngXUijsH1cjad-nV20vl0vPoT3C2P81cLqBbVyu0fBnBbjcl9rjZ4I8Vwuc2AmiFbeU5CY1k6qEF-kLwzF/s1600/client2.png
Server
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnAwBDmtJwkhSg87i9yCO6tHF4jDLpYlkcER5CwUXWiw2QHyfRrOWLnvhfafnsHlM6VRhARzRL-xpWUjiDk-bQ9jJeVfxv-e1ZOTWtXj6uqxuHzjinrQlbymKLscBCGCwj9vDVO3fn3NLm/s1600/server2.png

Mengecek port yang digunakan oler server dengan menggunakan perintah berikut:

# netstat -nlptu | grep server2

Berikut tampilan outputnya:
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7D53-FMwieOIwfDP9Lka-T10ZDNwPX3gmXf_RzkygMPhtG44NIqmxO1VKlC1rRI3vo4K_ccuDgnIBHFBNXI6MFy-47Pbj1mmm0NNbQ4t2BjMUez7pwooDUyp4N9_G2XIROCNfhXhwpp5C/s1600/netstat.png

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:
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK6d55Dx6Sv9UrXpnqr83eBMNoc3VtyO-Wb6iB4TY_pMIQA-K5vnjDJeHrwTimpITHj2KTzWRhkodPbgzV7vhyXwMq3V56MoB4M4zTfX9_rKBT2zYypMbJBHkfPbca1ZBDitfijlnzcirM/s1600/tcpdump.png

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.


Program Stream Socket

Program Stream Socket

Cangkupan mengenai socket dapat melakukan komunikasi antar proses/program melalui jaringan berbasis yang TCP/IP tentunya, bahkan dengan program lain yang berjalan pada platform non-unix seperti Microsoft Windows, sepanjang program tersebut berbicara dalam protokol transfer yang sama. Fasilitas-fasilitas yang disediakan oleh mesin unix seperti rlogin, ssh, ftp, dan lain-lain menggunakan socket sebagai sarana komunikasi mereka. Socket dibentuk dan digunakan dengan cara yang berbeda. Komunikasi socket terutama diciptakan untuk tujuan menjembatani komunikasi antara dua buah program yang dijalankan pada mesin yang berbeda. 
Socket sendiri merupakan suatu 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:

Pada listing program di atas menyatakan bahwa membuat suatu cangkupan client yang akan di arahkan terhadap server dengan hostname dimana pada port ketentuan yang sudah tetap, yang mendefinisikan dalam perintah membuat suatu socket dengan pengalamatan antara client ke server dan melakukan suatu perintah terdefinisi yaitu konfirgurasi conecting terhadap server.
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 listing diatas menyatakan bahwa program server akan melakukan prosedur dengan syarat yaitu melakukan pembukaan koneksi yang terdapat didalamnya yaitu berupa suatu langkah-langkah seperti membuat socket, mengikat socket, menyiapkan socket, menerima koneksi dan pengalamatan socket.

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

Berikut tampilan outputnya :

Client
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKJ2EGS_Hr9se50uCnhfpPPDJ7WC4lrv5CXBlZdp4aRjohxcGWqjkMqqZOdH54EKKU8FWCgzwMisqHbdID2_X2UdRcYgymmnuNK3oTsZcdczsO0Kn-orxVEN8d2qAd8y8RGLkUzscd3vEI/s1600/client.png
Server
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTEyHGUYTomvoNC5_OOgesoDv330EvgIoaFhiuq0W4HowWFklfWONsuksCdSUobLeH5pwgLXvo6a8lEvfbdD_tRdruhtcuSpWTqkLaRQjKQ4KbzGioUPPTYDWQyfJG_1HRkeOeNy6P2i2o/s320/server.png