Redenominasi Rupiah, Apa dan Mengapa?

Gambar
Bayangkan kamu sedang berbelanja di minimarket. Harga sebotol minuman tertulis 15.000. Sekarang, bayangkan harga yang sama ditulis sebagai 15. Apa yang terjadi? Uangnya hilang? Nilainya berkurang? Tidak juga! Inilah gambaran sederhana dari sebuah kebijakan moneter yang disebut redenominasi . Apa itu Redenominasi? Singkatnya, redenominasi adalah menyederhanakan denominasi (angka nominal) mata uang dengan mengurangi jumlah digit (angka nol) tanpa mengurangi nilainya . Analoginya: Kamu punya uang Rp 100.000 di dompet. Setelah redenominasi, uang itu akan ditulis sebagai Rp 100. Namun, daya belinya TETAP SAMA. Dulu Rp 100.000 bisa membeli 10 buku tulis, setelah redenominasi, Rp 100 tetap bisa membeli 10 buku tulis yang sama. Hanya angkanya saja yang dipotong. Redenominasi BUKAN Sanering! Ini adalah hal yang paling penting untuk dipahami. Banyak orang menyamakan redenominasi dengan sanering, padahal keduanya sangat berbeda. Aspek Redenominasi Sanering Nilai Uang Tidak Berubah . Daya beli ...

Socket Programming

Socket Programming
Socket adalah virtual endpoint (ujung) dari segala bentuk komunikasi jaringan antar 2 host pada suatu jaringan.
Contohnya bila kita mengetik www.google.com di browser kita, maka browser akan membuka sebuah socket dan menyambung ke google.com untuk mengambil halaman web dan menunjukkannya ke kita.
Berikut adalah contoh tutorial socket progamming dalam bahasa C

Membuat SocketPertama-tama kita harus membuat socket

#include<stdio.h>
#include<sys/socket.h>

int main(int argc , char *argv[])
{
    int socket_desc;
    socket_desc = socket(AF_INET , SOCK_STREAM , 0);
     
    if (socket_desc == -1)
    {
        printf("Could not create socket");
    }
     
    return 0;
}

Fungsi socket() membuat socket dan me-return sebuah descriptor yang bisa digunakan di fungsi lain.
Fungsi dia atas membuat socket dengan properti sebagai berikut:

Address Family - AF_INET (koneksi ini adalah IP version 4)
Type - SOCK_STREAM (berarti koneksi berorientasi TCP protocol)
Protocol - 0 [ atau IPPROTO_IP ini adalah IP protocol]


Menyambungkan Socket ke ServerUntuk menyambung ke server kita membutuhkan ip address, dan port number
Setelah itu kita membuat struct sockaddr_in

#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<arpa/inet.h> //inet_addr

int main(int argc , char *argv[])
{
    int socket_desc;
    struct sockaddr_in server;
     
    //Membuat socket
    socket_desc = socket(AF_INET , SOCK_STREAM , 0);
    if (socket_desc == -1)
    {
        printf("Could not create socket");
    }
    puts("Socket created");
     
    //Mempersiapkan struct sockaddr_in
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = htons( 8888 );
}


Bind socket ke portFungsi bind() digunakan untuk mengikat socket ke ip address dan port tertentu

#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<arpa/inet.h> //inet_addr

int main(int argc , char *argv[])
{
    int socket_desc;
    struct sockaddr_in server;
     
    //Membuat socket
    socket_desc = socket(AF_INET , SOCK_STREAM , 0);
    if (socket_desc == -1)
    {
        printf("Could not create socket");
    }
    puts("Socket created");
     
    //Mempersiapkan struct sockaddr_in
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = htons( 8888 );
    //Bind
    if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
    {
        //print the error message
        perror("bind failed. Error");
        return 1;
    }
    puts("bind done");
}


Membuat socket ke dalam listening mode

Setelah binding socket, kita harus listen(mendengar) untuk koneksi
#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<arpa/inet.h> //inet_addr

int main(int argc , char *argv[])
{
    int socket_desc;
    struct sockaddr_in server;
     
    //Membuat socket
    socket_desc = socket(AF_INET , SOCK_STREAM , 0);
    if (socket_desc == -1)
    {
        printf("Could not create socket");
    }
    puts("Socket created");
     
    //Mempersiapkan struct sockaddr_in
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = htons( 8888 );
    //Bind
    if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
    {
        //print the error message
        perror("bind failed. Error");
        return 1;
    }
    puts("bind done");
  
    //Listen
    listen(socket_desc , 3);
}


Accept(menerima) koneksi

Menggunakan fungsi accept()
#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<arpa/inet.h> //inet_addr

int main(int argc , char *argv[])
{
    int socket_desc , client_sock , c , read_size;
    struct sockaddr_in server , client;
     
    //Membuat socket
    socket_desc = socket(AF_INET , SOCK_STREAM , 0);
    if (socket_desc == -1)
    {
        printf("Could not create socket");
    }
    puts("Socket created");
     
    //Mempersiapkan struct sockaddr_in
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = htons( 8888 );
    //Bind
    if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
    {
        //print the error message
        perror("bind failed. Error");
        return 1;
    }
    puts("bind done");
  
    //Listen
    listen(socket_desc , 3);
    //Accept dan menunggu incoming connection
    puts("Waiting for incoming connections...");
    c = sizeof(struct sockaddr_in);
     
    //accept connection from an incoming client
    client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c);
    if (client_sock < 0)
    {
        perror("accept failed");
        return 1;
    }
    puts("Connection accepted");

}


Menerima dan mengirim data melalui socket

Menggunakan recv(). Dalam contoh di bawah kita akan mengirimkan kembali pesan yang kita terima
#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<arpa/inet.h> //inet_addr
#include<unistd.h>    //write

int main(int argc , char *argv[])
{
    int socket_desc , client_sock , c , read_size;
    struct sockaddr_in server , client;
    char client_message[2000];
     
    //Membuat socket
    socket_desc = socket(AF_INET , SOCK_STREAM , 0);
    if (socket_desc == -1)
    {
        printf("Could not create socket");
    }
    puts("Socket created");
     
    //Mempersiapkan struct sockaddr_in
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = htons( 8888 );
    //Bind
    if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
    {
        //print the error message
        perror("bind failed. Error");
        return 1;
    }
    puts("bind done");
  
    //Listen
    listen(socket_desc , 3);
    //Accept dan menunggu incoming connection
    puts("Waiting for incoming connections...");
    c = sizeof(struct sockaddr_in);
     
    //accept connection from an incoming client
    client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c);
    if (client_sock < 0)
    {
        perror("accept failed");
        return 1;
    }
    puts("Connection accepted");

    //Menerima pesan dari client client
    while( (read_size = recv(client_sock , client_message , 2000 , 0)) > 0 )
    {
        //Mengirimkan pesan kembali ke client client
        write(client_sock , client_message , strlen(client_message));
    }
     
    if(read_size == 0)
    {
        puts("Client disconnected");
        fflush(stdout);
    }
    else if(read_size == -1)
    {
        perror("recv failed");
    }
     
    return 0;
}


Menutup socket
Fungsi close() digunakan untuk menutup socket. Perlu menggunakan header unistd.h

close(socket_desc);


Contoh Aplikasi

Source code di atas dapat membuat aplikasi client dan server untuk program chatting sederhana

Server:
#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<arpa/inet.h> //inet_addr
#include<unistd.h>    //write

int main(int argc , char *argv[])
{
    int socket_desc , client_sock , c , read_size;
    struct sockaddr_in server , client;
    char client_message[2000];
     
    //Membuat socket
    socket_desc = socket(AF_INET , SOCK_STREAM , 0);
    if (socket_desc == -1)
    {
        printf("Could not create socket");
    }
    puts("Socket created");
     
    //Mempersiapkan struct sockaddr_in
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = INADDR_ANY;
    server.sin_port = htons( 8888 );
    //Bind
    if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
    {
        //print the error message
        perror("bind failed. Error");
        return 1;
    }
    puts("bind done");
  
    //Listen
    listen(socket_desc , 3);
    //Accept dan menunggu incoming connection
    puts("Waiting for incoming connections...");
    c = sizeof(struct sockaddr_in);
     
    //accept connection from an incoming client
    client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c);
    if (client_sock < 0)
    {
        perror("accept failed");
        return 1;
    }
    puts("Connection accepted");

    //Menerima pesan dari client client
    while( (read_size = recv(client_sock , client_message , 2000 , 0)) > 0 )
    {
        //Mengirimkan pesan kembali ke client client
        write(client_sock , client_message , strlen(client_message));
    }
     
    if(read_size == 0)
    {
        puts("Client disconnected");
        fflush(stdout);
    }
    else if(read_size == -1)
    {
        perror("recv failed");
    }
     
    return 0;
}

Program di atas akan memulai server di local host(127.0.0.1) pada port 8888


Client:
#include<stdio.h> //printf
#include<string.h>    //strlen
#include<sys/socket.h>    //socket
#include<arpa/inet.h> //inet_addr

int main(int argc , char *argv[])
{
    int sock;
    struct sockaddr_in server;
    char message[1000] , server_reply[2000];
     
    //Membuat socket
    sock = socket(AF_INET , SOCK_STREAM , 0);
    if (sock == -1)
    {
        printf("Could not create socket");
    }
    puts("Socket created");
     
    server.sin_addr.s_addr = inet_addr("127.0.0.1");
    server.sin_family = AF_INET;
    server.sin_port = htons( 8888 );

    //Connect ke remote server
    if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0)
    {
        perror("connect failed. Error");
        return 1;
    }
     
    puts("Connected\n");
     
    //keep communicating with server
    while(1)
    {
        printf("Enter message : ");
        scanf("%s" , message);
         
        //Mengirim data
        if( send(sock , message , strlen(message) , 0) < 0)
        {
            puts("Send failed");
            return 1;
        }
         
        //Menerima balasan dari server
        if( recv(sock , server_reply , 2000 , 0) < 0)
        {
            puts("recv failed");
            break;
        }
         
        puts("Server reply :");
        puts(server_reply);
    }
     
    close(sock);
    return 0;
}

Komentar

Postingan populer dari blog ini

SR Latch & Flip-Flop (Rangkaian Sekuensial 1 part 2)

Privacy Policy

Parent, Child, Zombie, Orphan and Daemon (Process)