Selasa, 15 Januari 2013

KOMUNIKASI DATA


 TUGAS KOMUNIKASI DATA

A.    Tujuan
1.      Mengetahui proses pengiriman data sampai data diterima kembali
2.      Mengetahui proses penambahan error control

B.     Dasar Teori
Komunikasi data merupakan proses pengiriman dan penerimaan data/informasi dari dua atau lebih device (alat,seperti komputer/laptop/printer/dan alat komunikasi lain)yang terhubung dalam sebuah jaringan,  baik lokal maupun yang luas, seperti internet. 
Namun dalam proses pengiriman dan penerimaan informasi tersebut bisa saja terjadi kesalahan, yaitu data yang diterima tidak sesuai dengan yang dikirim, ataupun gagalnya pengiriman informasi atau data. Sehingga dibutuhkannya Error Detection and Error Corection.


 

Teknik Error Detection

Ada beberapa cara terkait dengan bagaimanakah teknik Error Detection ini bekerja, yaitu :
Parity check, adalah menambahkan sebuah bit pada setiap pengiriman sejumlah bit, sehingga jumlah bit bernilai 1 selalu genap atau ganjil. Parity bit tidak dapat mendeteksi kesalahan dalam jumlah yang genap.
CRC (cyclic redundancy chek), adalah method yang umum digunakan untuk mendeteksi error . CRC beroperasi pada sebuah frame/block. Setiap block berukuran m bit yang akan dikirim akan dihitung CRC checksumnya (berukuran r bit), kemudian dikirim bersama2 dengan frame (dengan ukuran m+r bit).

Terdapat 2 macam cara penambahan bit parity yaitu :
·                Pariti ganjil (odd parity) yaitu Bit pariti yang ditambahkan supaya banyaknya bit “1” tiap karakter atau data ganjil.
·                Pariti genap (even parity) yaitu Bit parity yang ditambahkan supaya banyaknya bit “1” tiap karakter atau data genap.

Teknik Error Correction
Bila dijumpai kesalahan pada data yang telah diterima, maka perlu diadakan tindakan perbaikan agar kesalahan tidak memberikan dampak yang signifikan. Metode koreksi ini diantaranya adalah :
Kirim ulang, cara ini merupakan cara yang paling simpel, yaitu bila komputer penerima menemukan kesalahan pada data yang diterima, maka selanjutnya meminta komputer pengirim untuk mengirim mengulangi pengiriman data.
Mengirim data koreksi, data yang dikirim harus ditambah dengan kode tertentu dan data duplikat. Bila penerima menjumpai kesalahan pada data yang diterima, maka perbaikan dilakukan dengan mengganti bagian yang rusak dengan data duplikat, tetapi cara ini jarang dilakukan.
Subtitusi simbol, Bila ada data yang rusak maka komputer penerima mengganti bagian itu dengan karakter lain, sepertu karakter SUB yang berupa tanda tanya terbalik. Jika pemakai menjumpai karakter ini (pada program word-prossessor), maka berarti data yang diterima telah mengalami kerusakan, selanjutnya perbaikan dilakukan sendiri.



 
C.    Penjelasan Program

import java.util.Scanner;
class konversi {
// deklarasi variabel-variabel yang digunakan
            int ascii;
            int bcs = 0;
            String data1 = "";
            String data2 = "";
            String BCS = "";
            String temp = "";
            String binary;

  // method ini untuk mengubah tiap karakter dari teks yang di inputkan kedalam ASCII
            public int charKeAscii(char teks) {
                        ascii = (int) teks;
                        return ascii;
            }

// method untuk mengubah dari ASCII ke biner
            public String asciiKeBiner() {
                        String biner;

//  jika ascii lebih dari ato sama dengan 128, maka data sudah mencapa 8 bit, data ditulis seperti apa adanya.
                        if (ascii >= 128){        
            biner = Integer.toBinaryString(ascii);
            data1 = data1+biner;
            return biner;
        }
 //  jika ascii lebih dari ato sama dengan 64, maka data baru berupa 7 bit, data ditulis ditambah dengan 0 supaya menjadi 8 bit.
         else if (ascii >= 64) {
            biner = Integer.toBinaryString(ascii);
            binary = "0" + biner;
            data1 = data1+binary;
            return binary;
        }

//  jika ascii lebih dari ato sama dengan 32, maka data baru berupa 6 bit, data ditulis ditambah dengan 00 supaya menjadi 8 bit.
        else if (ascii >= 32) {
            biner = Integer.toBinaryString(ascii);
            binary = "00" + biner;
            data1 = data1+binary;
            return binary;
        }
           
//  jika ascii lebih dari ato sama dengan 16, maka data baru berupa 5 bit, data ditulis ditambah dengan 000 supaya menjadi 8 bit.
        else if (ascii >= 16) {
            biner = Integer.toBinaryString(ascii);
            binary= "000" + biner;
            data1 = data1+binary;
            return binary;
        }
          




//  jika ascii lebih dari ato sama dengan 8, maka data baru berupa 4 bit, data ditulis ditambah dengan 0000 supaya menjadi 8 bit.
        else if (ascii >= 8) {
            biner = Integer.toBinaryString(ascii);
            binary = "0000" + biner;
            data1 = data1+binary;
            return binary;
        }
           
//  jika ascii lebih dari ato sama dengan 4, maka data baru berupa 3 bit, data ditulis ditambah dengan 00000 supaya menjadi 8 bit.
        else if (ascii >= 4) {
            biner = Integer.toBinaryString(ascii);
            binary = "00000" + biner;
            data1 = data1+binary;
            return binary;
        }
           
//  jika ascii lebih dari ato sama dengan 2, maka data baru berupa 2 bit, data ditulis ditambah dengan 000000 supaya menjadi 8 bit.
        else if (ascii >= 2) {
            biner = Integer.toBinaryString(ascii);
            binary = "000000" + biner;
            data1 = data1+binary;
            return binary;
        }
           




//  selain itu data baru berupa 1 bit, data ditulis ditambah dengan 0000000 supaya menjadi 8 bit.
        else {
            biner = Integer.toBinaryString(ascii);
            binary = "0000000" + biner;
            data1 = data1+binary;
            return binary;

// Setiap hasil konversi biner akan disimpan dan ditambahkan dengan data sebelumnya pada variabel data1. Setelah semua karakter dirubah ke biner dan disimpan pada variabel data1 maka deretan biner panjang ini yang akan dikirimkan ke penerima.
        }
            }
           
// method untuk mencari error detection
            public int error() {
                        bcs = (ascii ^ bcs);
                        return bcs;
            }

Nilai BCS ditentukan dengan cara nilai ascii karakter pertama di X-OR dengan 0 dan hasilnya di X-OR lagi dengan nilai ascii karakter selanjutnya, begitu seterusnya. Nilaii BCS terakhir akan dikirimkan bersama dengan data ke penerima.
          
// method untuk merubah data biner ke string
            public String binerKeString() {
                        String bnr;
                        error();




// method untuk mencari besar BCS
persyaratan sama seperti method asciiKeBiner, supaya BCS disimpan dalam 8 bit.
                        if (bcs >= 128){
            bnr = Integer.toBinaryString(bcs);
            BCS = bnr;
            return (bnr);
        }
        else if (bcs >= 64) {
            bnr = Integer.toBinaryString(bcs);
            binary = "0" + bnr;
            BCS = binary;
            return (binary);
        }
        else if (bcs >= 32){
            bnr = Integer.toBinaryString(bcs);
            binary = "00" + bnr;
            BCS = binary;
            return (binary);
        }
        else if (bcs >= 16){
            bnr = Integer.toBinaryString(bcs);
            binary = "000" + bnr;
            BCS = binary;
            return (binary);
        }
        else if (bcs >= 8){
            bnr = Integer.toBinaryString(bcs);
            binary = "0000" + bnr;
            BCS = binary;
            return (binary);
        }
        else if (bcs >= 4){
            bnr = Integer.toBinaryString(bcs);
            binary = "00000" + bnr;
            BCS = binary;
            return (binary);
        }
        else if (bcs >= 2){
            bnr = Integer.toBinaryString(bcs);
            binary = "000000" + bnr;
            BCS = binary;
            return (binary);
        }
        else {
            bnr = Integer.toBinaryString(bcs);
            binary = "0000000" + bnr;
            BCS = binary;
            return (binary);

BCS disimpan dalam bentuk biner.
        }
            }

// method untuk memproses data yang diterima dari bentuk string diuraikan tiap character  kemudian disimpan ke dalam array dt.  Jika semua character sebanyak panjang array sudah diproses kedalam BCS, maka character akan diubah kembali ke dalam bentuk string.

    public void stringToString() {
        char[] dt = data1.toCharArray();
            int count = 0;
            for(int i=0; i<dt.length+1; i++) {
       if (i<dt.length) {
        if (count!=8) {
           String s1 = Character.toString(dt[i]);
           temp = temp + s1;
           count++;
           } else {
          System.out.printf("%8s | %5s | %9s | %16s |", temp, stringToAscii(), asciiToChar(),
          binerKeString());
          System.out.println();
          temp = "";
          count = 1;
          String s1 = Character.toString(dt[i]);
          temp = temp + s1;
                           }
                       }
               }
        }

// method untuk mengubah data ke bentuk ASCII kembali
            public int stringToAscii() {
                        ascii = Integer.parseInt(temp,2);
                        return ascii;
            }
        
// ASCII dikembalikan ke bentuk character
            public String asciiToChar() {
                        char kar = (char) stringToAscii();
                        String Kar = Character.toString(kar);
                        data2 = data2 + Kar;
                        return Kar;
            }
}
Main class
public class UAS_11520244026 {
       public static void main( String[] args ) {
                        Scanner baca = new Scanner(System.in);
                        konversi br = new konversi();
                        String teks;

                        // menginputkan teks  
                        System.out.print("Input Teks : ");
                        teks = baca.nextLine();
                        System.out.println();
                       
                        // teks yang masuk di uraikan tiap character dan disimpan ke dalam array
                        char[] data = teks.toCharArray();

                        // menampilkan tabel proses pengiriman data
                        System.out.println(":: Pengirim :: ");
                        System.out.println("------------------------------------------------.");
                        System.out.println("Character | ASCII |   Binary   | Block Check Sum|");
                          System.out.print("------------------------------------------------'");
                       
                        for (int i=0; i<data.length; i++) {
                                    System.out.println();
                                    System.out.printf("%9s | %5s | %10s | %14s |",data[i],br.charKeAscii(data[i]),br.asciiKeBiner(),br.binerKeString());
                        }
                        System.out.println(" -->> Transmitted Sum");
                        System.out.println("------------------------------------------------'");

            // menampilkan data dikirim dan BCS
                        System.out.println("Data Dikirim\t: "+br.data1);
                        System.out.println("BCS\t\t: "+br.BCS);
                        // menampilkan tabel penerimaan data
                        System.out.println("\n:: Penerima ::");
                        System.out.println("------------------------------------------------.");
                        System.out.println(" Binary  | ASCII | Character | Block Check Sum  |");
                        System.out.println("------------------------------------------------'");
                        br.stringToString();
                        System.out.printf("%8s | %5s | %9s | %16s |",br.temp,br.stringToAscii(),br.asciiToChar(),br.binerKeString());

 // melihat apakah data benar atau salah dari hasil akhir BCS, jika hasilnya 00000000 berarti benar, selain itu salah             
                        if (br.binary.equals("00000000")) {
                                    System.out.println(" -->> Data Benar ");
                        } else {
                                    System.out.println(" -->> Data Salah ");
                        }
                        System.out.println("------------------------------------------------'");

// menampilkan data diterima berupa teks
                        System.out.println("Data Diterima : "+br.data2);
            }
}


D.     Kesimpulan
Proses pengiriman data dalam komunikasi data dimulai dari informasi masuk berupa teks yang tiap karakternya diubah kedalam bentuk ASCII kemudian dikirim dalam deretan bit beserta Block Check Sum kemudian data diterima dalam bentuk deretan bit yang kemudian dikonversi kedalam bentuk teks lagi.