Kamis, 09 Agustus 2018

Pemrograman Jaringan (TCP dan Virtual Box)


Membuat Program Komunikasi Dengan Mengunakan Protokol TCP dan Virtual Box


Pada penulisan ini, saya akan membahas bagaimana cara berkomunikasi dengan menggunakan protocol TCP. Pada pemrograman ini saya menggunakan VirtualBox sebagai media menjalankan Sistem Operasi. Saya menggunakan Virtualbox untuk menggunakan fitur virtualisasinya sehingga kita bisa menjalankan beberapa instansi Sistem Operasi sekaligus tanpa perlu perangkat lebih dari satu dan tanpa perlunya partisi apalagi Hard Disk tambahan. Untuk Sistem Operasi yang akan saya gunakan pada pemrograman ini yaitu  Sistem Operasi Linux dengan distro Ubuntu. Disini saya akan menggunakan 2 jenis Sisem Operasi yaitu Sistem Operasi yang diperuntukan untuk menjadi Server dan juga Sistem Operasi yang diperuntukan untuk menjadi Client, untuk sisi Server sendiri saya akan menggunakan Ubuntu-16.04.1-server-i386, dan untuk sisi Client saya akan menggunakan Ubuntu-16.04.1-desktop-i386.


Disini saya akan menggunakan bahasa pemrograman Python. Pertama kita harus jalankan kedua VM yaitu VM Server dan VM Client. Setelah itu kita buat script untuk sisi Server dengan menggunakan perintah sebagai berikut :



Kemudian kita akan mengisikan script tersebut dengan kodingan berikut ini :


Setelah selesai memasukkan script tersebut kita bisa langsung keluar sekaligus menyimpan nya, lalu membuat script untuk sisi Client dengan perintah sebagai berikut :


Kemudian kita akan mengisikan script tersebut dengan kodingan berikut ini :


Jika sudah, kita bisa langsung keluar sekaligus menyimpan nya, lalu kita bisa mulai menjalankan script yang terdapat pada sisi Server dengan perintah sebagai berikut :


Setelah itu kita bisa menjalankan script pada sisi Client dengan menggunakan perintah sebagai berikut :


Setelah menjalankan perintah untuk mengaktifkan server, kita akan mendapatkan pemberitahuan sebagai berikut pada sisi Server :


Sementara pada sisi Client kita akan mendapatkan pesan pembuka yang berisi panduan perintah yang dapat digunakan oleh Client. Disini kita akan diminta untuk mengetikkan nama kita pada sisi Client yang digunakan sebagai identitas kita pada aplikasi tersebut. Tampilannya seperti berikut :


Setelah itu kita bisa mulai mengirimkan pesan dari sisi Client ke sisi Server seperti berikut ini :


Ketika kita mengirim pesan dari Client ke Server maka pesan kita akan muncul dengan format sebagai berikut :


Kemudian kita akan mencoba untuk menggunakan perintah "keluar" dimana perintah ini akan mengeluarkan kita dari sisi Client dan menghentikan script pada sisi Server seperti berikut :


Hasil dari perintah "keluar" tersebut akan memunculkan pemberitahuan sebagai berikut pada sisi Client:















Rabu, 08 Agustus 2018

Pemrograman Jaringan (Aplikasi Client-Server TCP)


Source Code Untuk Membangun Aplikasi Client-Server TCP Sederhana

Pada penulisan ini, saya akan membuat sebuah program menggunakan bahasa Pemrograman  Java untuk membangun aplikasi client-server TCP sederhana. disini saya akan membuat 2 source code yang masing-masing berguna untuk membuat aplikasi pada sisi client dan satu lagi untuk aplikasi pada sisi server.

Saya akan menjelaskan source code pada sisi client dan server. Saya akan mulai dengan source pada sisi server terlebih dahulu.
      
      a.      Server

Berikut listing programnya :




Berikut penjelasannya :

import java.io.*;

Pada source code diatas berfungsi untuk mengimport atau pemanggilan method/fungsi yang terdapat dalam library io. IO ini berisikan fungsi-fungsi input dan output yang berguna untuk program ini. Source code selajutnya yaitu :

import java.net.*;

Source code diatas berfungsi untuk pemanggilan kelas dari method “java.net” pada pemrograman java dimana kelas method tersebut berguna untuk membuat suatu komunikasi jaringan dalam sebuah program. Lalu baris source code selanjutnya yaitu :

public class simpleServer {

Source code diatas maksudnya kita akan membuat class dengan nama simpleServer. Lalu source code selanjutnya yaitu :

public final static int TESTPORT = 5000;

Source diatas berfungsi untuk mendeklarasikan variable TESTPORT dengan tipe data integer yang bernilai 5000. Variable ini nantinya tidak bisa dimodifikasi atau diubah didalam program. source code selanjutnya yaitu :

public static void main(String args[]) {

Source code diatas berisikan perintah yang harus kita tulis ketika kita ingin membuat program. Source ini mengindikasikan nama suatu method dalam class yang kita buat, yang bertindak sebagai method utama. Lalu source code selanjutnya :

ServerSocket checkServer = null;

Source code diatas berfungsi untuk mendeklarasikan nilai null pada objek checkServer yang bertipe ServerSocket, dimana Socket adalah titik akhir untuk komunikasi antara dua mesin. Source code selanjutnya yaitu :

BufferedReader is = null;

Source code diatas berfungsi untuk mendeklarasikan nilai null pada objek is yang bertipe BufferedReader, dimana BufferedReader adalah perintah untuk mendapatkan input dari keyboard. Source code selanjutnya yaitu :

DataOutputStream os = null;

Source code diatas berfungsi untuk mendeklarasikan nilai null pada objek os yang bertipe DataOutputStream, dimana DataOutputStream adalah class yang menyediakan cara praktis untuk menuliskan tipe data primitive ke output stream. Source code selanjutnya yaitu :

Socket clientSocket = null;

Source code diatas berfungsi untuk mendeklarasikan nilai null pada objek clientSocket yang bertipe Socket, dimana Socket adalah titik akhir untuk komunikasi antara dua mesin. Source code selanjutnya yaitu :

try {
checkServer = new ServerSocket(TESTPORT);
System.out.println("Aplikasi Server hidup ...");
} catch (IOException e) {
System.out.println(e);
}

Source code diatas merupakan perintah try catch yang berfungsi menangani suatu kesalahan atau error pada suatu listing program. Program akan menjalankan listing program yang terdapat di dalam blok try yaitu objek checkServer akan membuat stream ServerSocket dan menghubungkan port tertentu yang sudah ditentukan diawal source code program. Jika checkServer memiliki saluran/port yang terkait, maka akan dicetak teks “Aplikasi Server Hidup …”. Kemudian catch akan menangkap exception berupa IOException. Apabila terjadi kesalahan, maka akan mencetak kesalahan tersebut. Lalu source code selanjutnya yaitu :

try {
clientSocket = checkServer.accept();
is = new BufferedReader(newInputStreamReader(clientSocket.getInputStream()));
os = new DataOutputStream(clientSocket.getOutputStream());
} catch (Exception ei) {
ei.printStackTrace();
}

Source diatas adalah perintah try catch kedua pada program ini. Perintah yang terdapat pada blok try yaitu menerima nilai clientSocket jika sama dengan nilai checkServer. Jika sudah diterima, maka client dapat melakukan perintah input dari keyboard. Nilai inputan tersebut akan disimpan dalam variabel is.

Kemudian DataOutputStream berfungsi untuk menyimpan data yang nantinya akan dikeluarkan atau ditampilkan pada layar. Data tersebut akan disimpan didalam variabel os.

Lalu catch akan menangkap exception berupa IOException. Lalu ei.printStackTrace(); untuk mencetak throwable dan backtrace untuk stream standard error. Metode ini mencetak jejak stack untuk objek. Lalu source code selanjutnya yaitu :

try {
line = is.readLine();
System.out.println("Terima : " + line);
if (line.compareTo("salam") == 0) {
os.writeBytes("salam juga");
} else {
os.writeBytes("Maaf, saya tidak mengerti");
}
} catch (IOException e) {
System.out.println(e);
}

Source diatas adalah perintah try catch ketiga pada program ini. Perintah yang terdapat pada blok try yaitu menginisialisasi nilai line yang diambil dengan membaca pada inputan yang kita masukkan di variabel is. Lalu akan mencetak teks “Terima :” yang disertai nilai dari line.

Kemudian terdapat perintah percabangan if else. Pada blok if, jika nilai line sama dengan “salam”, maka akan dicetak teks “salam juga”. Namun apabila kondisi tersebut tidak terpenuhi akan menjalankan perintah pada blok else yaitu mencetak teks “Maaf, saya tidak mengerti”.

Kemudian catch akan menangkap exception berupa IOException. Apabila terjadi kesalahan, maka akan mencetak kesalahan tersebut. Lalu source code selanjutnya yaitu :

try {
os.close();
is.close();
clientSocket.close();
} catch (IOException ic) {
ic.printStackTrace(); }
} }

Source diatas adalah perintah try catch ketiga pada program ini. Perintah yang terdapat pada blok try yaitu menutup program yang kita jalankan seperti input stream, output stream dan koneksi.

Lalu catch akan menangkap exception berupa IOException. Lalu ic.printStackTrace(); untuk mencetak throwable dan backtrace untuk stream standard error. Metode ini mencetak jejak stack untuk objek. 


      b.      Client

Berikut source code untuk sisi client :




Berikut penjelasannya :


import java.io.*;

Pada source code diatas berfungsi untuk mengimport atau pemanggilan method/fungsi yang terdapat dalam library io. IO ini berisikan fungsi-fungsi input dan output yang berguna untuk program ini. Source code selajutnya yaitu :

import java.net.*;

Source code diatas berfungsi untuk pemanggilan kelas dari method “java.net” pada pemrograman java dimana kelas method tersebut berguna untuk membuat suatu komunikasi jaringan dalam sebuah program. Lalu baris source code selanjutnya yaitu :

public class simpleClient{

Source code diatas maksudnya kita akan membuat class dengan nama simpleClient. Lalu source code selanjutnya yaitu :

public final static int REMOTE_PORT = 5000;

Source diatas berfungsi untuk mendeklarasikan variable REMOTE_PORT dengan tipe data integer yang bernilai 5000. Variable ini nantinya tidak bisa dimodifikasi atau diubah didalam program. source code selanjutnya yaitu :

public static void main(String args[]) throws Exception {

Source code diatas berisikan perintah yang harus kita tulis ketika kita ingin membuat program. Source ini mengindikasikan nama suatu method dalam class yang kita buat, yang bertindak sebagai method utama. Throws exception digunakan untuk memberitahu bahwa method yang bersangkutan dapat melempar eksepsi dengan tipe yang dideklarasikan oleh keyword throws tersebut. Lalu source code selanjutnya :

Socket cl = null;

Source code diatas berfungsi untuk mendeklarasikan nilai null pada objek clientSocket yang bertipe Socket, dimana Socket adalah titik akhir untuk komunikasi antara dua mesin. Source code selanjutnya yaitu :

BufferedReader is = null;

Source code diatas berfungsi untuk mendeklarasikan nilai null pada objek is yang bertipe BufferedReader, dimana BufferedReader adalah perintah untuk mendapatkan input dari keyboard. Source code selanjutnya yaitu :

DataOutputStream os = null;

Source code diatas berfungsi untuk mendeklarasikan nilai null pada objek os yang bertipe DataOutputStream, dimana DataOutputStream adalah class yang menyediakan cara praktis untuk menuliskan tipe data primitive ke output stream. Source code selanjutnya yaitu :

BufferedReader stdin = new BufferedReader(newInputStreamReader(System.in));

Source code diatas berfungsi untuk membuat objek baru bernama BufferedReader stdin dengan mengirim parameter berupa InputStreamReader(System.in) untuk menyuplai data inputan. Source code selanjutnya yaitu :

String userInput = null;

Source code diatas berfungsi untuk mendeklarasikan nilai null pada objek userInput yang bertipe String. Source code selanjutnya yaitu :

String output = null;

Source code diatas berfungsi untuk mendeklarasikan nilai null pada objek output yang bertipe String. Source code selanjutnya yaitu :

try {
cl = new Socket(args[0], REMOTE_PORT);
is = new BufferedReader(new
InputStreamReader(cl.getInputStream()));
os = new DataOutputStream(cl.getOutputStream());
} catch(UnknownHostException e1) {
System.out.println("Unknown Host: " + e1);
} catch (IOException e2) {
System.out.println("Erorr io: " + e2);
}

Source code diatas merupakan perintah try catch yang berfungsi menangani suatu kesalahan atau error pada suatu listing program. Program akan menjalankan listing program yang terdapat di dalam blok try yaitu objek cl akan membuat stream Socket dan menghubungkan port tertentu yang sudah ditentukan diawal source code program. Jika sudah diterima, maka client dapat melakukan perintah input dari keyboard. Nilai inputan tersebut akan disimpan dalam variabel is.

Kemudian DataOutputStream berfungsi untuk menyimpan data yang nantinya akan dikeluarkan atau ditampilkan pada layar. Data tersebut akan disimpan didalam variabel os.

Kemudian source diatas terdapat 2 catch yang akan menangkap exception berupa IOException. Apabila terjadi kesalahan pada catch pertama, maka akan mencetak ”Unknown Host :“ disertai dengan kesalahan e1. Apabila terjadi kesalahan pada catch kedua, maka akan mencetak”Error io :“ disertai dengan kesalahan e2. Lalu source code selanjutnya yaitu :

try {
System.out.print("Masukkan kata kunci: ");
userInput = stdin.readLine();
os.writeBytes(userInput + "\n");
} catch (IOException ex) {
System.out.println("Error writing to server..." + ex);
}          

Source diatas adalah perintah try catch kedua pada program ini yang berfungsi untuk menulis ke server. Perintah yang terdapat pada blok try yaitu mencetak teks “Masukkan kata kunci : “. Kemudian menginisialisasi nilai userInput yang diambil dengan membaca pada inputan yang kita masukkan di variabel stdin dan mecentak enter.

Kemudian catch yang akan menangkap exception berupa IOException. Apabila terjadi kesalahan, maka akan mencetak “Error writing to server... “ disertai dengan kesalahan ex. Lalu source code selanjutnya yaitu :

try {
output = is.readLine();
System.out.println("Dari server: " + output);
} catch (IOException e) {
e.printStackTrace();
}

Source diatas adalah perintah try catch ketiga pada program ini yang berfungsi menerima tanggapan dari server. Perintah yang terdapat pada blok try yaitu menginisialisasi nilai output yang diambil dengan membaca pada inputan yang kita masukkan di variabel is. Lalu akan mencetak teks “Dari server: ” yang disertai nilai dari output.

Lalu catch akan menangkap exception berupa IOException. Lalu ei.printStackTrace(); untuk mencetak throwable dan backtrace untuk stream standard error. Metode ini mencetak jejak stack untuk objek. Lalu source code selanjutnya yaitu :

try {
is.close();
os.close();
cl.close();
} catch (IOException x) {
System.out.println("Error writing...." + x); }
} }

Source diatas adalah perintah try catch ketiga pada program ini. Perintah yang terdapat pada blok try yaitu menutup program yang kita jalankan seperti input stream, output stream dan koneksi.
Kemudian catch yang akan menangkap exception berupa IOException. Apabila terjadi kesalahan, maka akan mencetak “Error writing.... “ disertai dengan kesalahan x.

     c.      Menjalankan Aplikasi Client-Server

Pertama Kompilasi kedua program diatas dengan mengetik berikut pada cmd:

javac simpleServer.java
javac simpleClient.java

Jalankan kedua program tersebut dikomputer anda. Pertama jalankan server, (buka jendela console shell lebih dulu), kemudian ketikkan perintah dibawah ini dan  tunggu koneksi client.

java simpleServer

Untuk menjalankan program client buka jendela console shell baru dan ketikkan.

java simpleClient <nama-komputer-server>

Pada aplikasi client, masukkan kata kunci yang diminta, yaitu “salam”. Perhatikan apa terjadi kemudian di sisi aplikasi Server maupun client. Coba juga Anda memasukkan kata-kata yang lain.

Berikut outputnya jika kita mengetiknya sesuai aturan :



Berikut outputnya jika kita mengetiknya tidak sesuai aturan :