Java Client Server on LAN

Di Artikel terdahulu, saya sudah memberikan contoh bagaimana kita meprogram socket dengan Java. Di artikel terdahulu, kita sudah bisa membuat program chatting yang jalan di client dan server, namun kita masih mencobanya di satu komputer, dengan nama memakai host localhost.
nah sekarang
kita akan mencoba menjalankan file yang sama (ChatClient.java dan ChatServer.java) agar bisa digunakan untuk chatting antar komputer di jaringan Local Area Network (LAN). Kita lihat topologi sederhana sebuah LAN di bawah ini:
Kita akan membuat antar Workstation bisa saling berkomunikasi/chatting. Caranya: 1. Kita harus menentukan mana yang akan jadi server chatting dan mana yang akan kita jadikan client 2. Setelah ditentukan, kita pindahkan file ChatServer.java ke workstation yang ingin kita jadikan server 3. Kita pindahkan file ChatClient.java ke workstation yang akan kita jadikan client 4. Kita harus ingat alamat IP/IP Address dari server, alamat IP ini yang akan kita gunakan untuk mengganti localhost 5. Kita ambil contoh IP Server adalah 192.168.1.1, maka untuk mengaktifkan Chat Server dengan cara:
 C: java ChatServer 9901  
6. Kita jalankan Client Chat di workstation yang lain dengan cara:
 C: java ChatClient 192.168.1.1 9901  
Dengan begitu, kita bisa chatting dengan sesama workstation di satu jaringan LAN. Mudah Bukan???? Semoga bermanfaat.

Java Client Server Sederhana

Pemrograman Client Server merupakan pemrograman yang melibatkan teknologi Networking. Kenapa? karena kita harus melakukan pemrograman untuk Port, Socket. Bagi para programmer yang sudah terbiasa dengan pemrograman socket, mungkin sudah tahu betul tingkat kesulitan dan keribetan yang dialami. Nah, Java sendiri sudah menyediakan class object yang bisa digunakan untuk mengatasi keribetan tersebut. Kita bisa menggunakan object class yang terlebih dahulu harus kita import. Dengan cara import java.net.*. OK. Kita Mulai saja. Untuk melakukan pemrograman client-Server di Java, kita terlebih dahulu harus mengetahui konsep kerja atau frameworknya. Pusing? tidak perlu lah..... Kita akan bahas di sini: Untuk lebih jelasnya kita akan membuat program chatting sederhana dengan menggunakan pemrograman Socket Client-Server ini. Beberapa hal yang harus dimemngerti adalah: 1. Kita harus membuat 2 buah program, satu program untuk berlaku sebagai Server, dan satu program lagi sebagai Client 2. Server bertugas menyediakan service/layanan kepada client 3. Client bertugas me-request service ke server, kemudian server akan me-response nya ke client 4. Server pertama kali akan men-scan port mana yang masih kosong dan bisa dipakai untuk melakukan session 5. Setelah Port ditemukan, maka port tersebut akan dibuka/open sehingga bersifat Open Connection. 6. Setelah itu Server akan membuka layanan dan menunggu request dari client 7. Client pertama tama harus membuka port yang sama dengan port yang dibuka oleh server 8. Setelah port terbuka, maka client akan mengirimkan request ke server 9. Client akan menerima response dari server 10. Begitulah akan tercipta sebah session dimana client dan server bisa saling berkomunikasi. Session akan berhenti kalau salah satu pihak (Client atau Server) menghentikan Session. Nah itu dia. sudah dijelaskan kira-kira kerjanya client dan Server. Tinggal kita akan lihat codingnya seperti apa. Pertama, kita akan membuat dulu program untuk Server. Seperti di bawah ini:
1:  import java.net.*;  
2:  import java.io.*;  
3:  public class ChatServer  
4:  { private Socket     socket  = null;  
5:    private ServerSocket  server  = null;  
6:    private DataInputStream streamIn = null;  
7:    private DataInputStream console  = null;  
8:     private DataOutputStream streamOut = null;  
9:    public ChatServer(int port)  
10:    { try  
11:     { System.out.println("Binding to port " + port + ", please wait ...");  
12:       server = new ServerSocket(port);  
13:       System.out.println("Server started: " + server);  
14:       System.out.println("Waiting for a client ...");  
15:       socket = server.accept();  
16:       System.out.println("Client accepted: " + socket);  
17:       open();  
18:       boolean done = false;  
19:       while (!done)  
20:       { try  
21:        { String line = streamIn.readUTF();  
22:          System.out.println(line);  
23:          //done = line.equals(".bye");  
24:          //mbales  
25:          line=console.readLine();  
26:          streamOut.writeUTF(line);  
27:          streamOut.flush();  
28:          done = line.equals(".bye");  
29:        }  
30:        catch(IOException ioe)  
31:        { done = true;  
32:        }  
33:       }  
34:       close();  
35:     }  
36:     catch(IOException ioe)  
37:     { System.out.println(ioe);  
38:     }  
39:    }  
40:    public void open() throws IOException  
41:    { streamIn = new DataInputStream(new BufferedInputStream(socket.getInputStream()));  
42:    //utk mbales  
43:    console  = new DataInputStream(System.in);  
44:       streamOut = new DataOutputStream(socket.getOutputStream());  
45:    }  
46:    public void close() throws IOException  
47:    { if (socket != null)  socket.close();  
48:     if (streamIn != null) streamIn.close();  
49:    }  
50:    public static void main(String args[])  
51:    { ChatServer server = null;  
52:     if (args.length != 1)  
53:       System.out.println("Usage: java ChatServer port");  
54:     else  
55:       server = new ChatServer(Integer.parseInt(args[0]));  
56:    }  
57:  }  
Simpan file di atas dengan nama chatServer.java. Dengan server = new ServerSocket(port); maka server akan menscan port yang masih kosong.

40:    public void open() throws IOException  
41:    { streamIn = new DataInputStream(new BufferedInputStream(socket.getInputStream()));  
42:    //utk mbales  
43:    console  = new DataInputStream(System.in);  
44:       streamOut = new DataOutputStream(socket.getOutputStream());  
45:    }  
46:    public void close() throws IOException  
47:    { if (socket != null)  socket.close();  
48:     if (streamIn != null) streamIn.close();  
49:    }  
50:    public static void main(String args[])  
51:    { ChatServer server = null;  
52:     if (args.length != 1)  
53:       System.out.println("Usage: java ChatServer port");  
54:     else  
55:       server = new ChatServer(Integer.parseInt(args[0]));  
56:    }  
57:  }  
Setelah port ketemu, maka port akan dibuka dnegan method seperti di atas. Method stop() berfungsi untuk menghentikan session kalau client atau server sudah mengetikkan kata ".bye" Untuk Program di Client nya seperti ini:
1:  import java.net.*;  
2:  import java.io.*;  
3:  public class ChatClient  
4:  { private Socket socket       = null;  
5:    private DataInputStream console  = null;  
6:    private DataOutputStream streamOut = null;  
7:    private DataInputStream streamIn = null;  
8:    public ChatClient(String serverName, int serverPort)  
9:    { System.out.println("Establishing connection. Please wait ...");  
10:     try  
11:     { socket = new Socket(serverName, serverPort);  
12:       System.out.println("Connected: " + socket);  
13:       start();  
14:     }  
15:     catch(UnknownHostException uhe)  
16:     { System.out.println("Host unknown: " + uhe.getMessage());  
17:     }  
18:     catch(IOException ioe)  
19:     { System.out.println("Unexpected exception: " + ioe.getMessage());  
20:     }  
21:     String line = "";  
22:     String client="Client> ";  
23:     String server="Server> ";  
24:     while (!line.equals(".bye"))  
25:     { try  
26:       { line = console.readLine();  
27:        streamOut.writeUTF(client+line);  
28:        streamOut.flush();  
29:        line = streamIn.readUTF();  
30:        System.out.println(server+line);  
31:       }  
32:       catch(IOException ioe)  
33:       { System.out.println("Sending error: " + ioe.getMessage());  
34:       }  
35:     }  
36:    }  
37:    public void start() throws IOException  
38:    { console  = new DataInputStream(System.in);  
39:     streamOut = new DataOutputStream(socket.getOutputStream());  
40:     streamIn = new DataInputStream(new BufferedInputStream(socket.getInputStream()));  
41:    }  
42:    public void stop()  
43:    { try  
44:     { if (console  != null) console.close();  
45:       if (streamOut != null) streamOut.close();  
46:       if (socket  != null) socket.close();  
47:     }  
48:     catch(IOException ioe)  
49:     { System.out.println("Error closing ...");  
50:     }  
51:    }  
52:    public static void main(String args[])  
53:    { ChatClient client = null;  
54:     if (args.length != 2)  
55:       System.out.println("Usage: java ChatClient host port");  
56:     else  
57:       client = new ChatClient(args[0], Integer.parseInt(args[1]));  
58:    }  
59:  }  
Simpan program tersebut dengan nama chatCleint.java. Nah untuk menjalankan programnya, di console kita ketikkan:
c:/java chatServer [port]
contoh, kita buka port 9901 (default port java):
c:/java chatServer 9901
Buka console satu lagi dan ketikkan:
c:/java chatClient  [serverName] [port]
contoh, kita buka server localhost dan port 9901(harus sama dengan port server):
c:/java chatClient localhost 9901
maka setelah di jalankan, kita bisa saling chatting antara client dan server. Chatting akan berakhir kalau salah satu menuliskan ".bye". Seperti gambar di bawah ini:
Selamat Mencoba. Semoga Bermanfaat.

Input Validation

Kadang dalam membuat program kita harus membuat Input Validation yang berguna untuk meminimalisasi kesalahan input dari user. Contohnya, kita akan membuat validasi inputan dari keyboard. Inputan yang diijinkan hanya beruapa angka 1 sampai 3 atau 1..3 saja. jadi inputan user yang diijinkan hanya berupa angka 1,2, atau 3 saja. Bagaimna caranya? Kita langsung lihat contoh di bawah ini:
1:  import java.util.Scanner;  
2:  import java.io.*;  
3:  public class pos_sederhana{  
4:  public static void main(String[] args){  
5:   String barang;  
6:   int qty,price;  
7:   Scanner inputText=new Scanner(System.in);  
8:   Scanner inputInt=new Scanner(System.in);  
9:   System.out.print("Input a Goods Name: ");  
10:   barang=inputText.nextLine();  
11:   System.out.print("Input Price: Rp ");  
12:   price=inputInt.nextInt();  
13:   do{  
14:   System.out.print("Input Quantity: [1..3]");  
15:   qty=inputInt.nextInt();  
16:   }while(qty<1 || qty>3);  
17:   }  
18:  }  
Pertama kita harus melakukan import Scanner untuk mengaktifkan fungsi input dari keyboard dengan cara mengetikkan import java.util.Scanner. Kita juga harus membuat instanisasi dari Scanner untuk input dari system, yaitu pada baris 7:

7:   Scanner inputText=new Scanner(System.in);  
8:   Scanner inputInt=new Scanner(System.in);  

Nah, kita akan membuat sebuah validasi input yaitu untuk menginput qty. yangdiijinkan hanya 1..3. Caranya adalah:

13:   do{  
14:   System.out.print("Input Quantity: [1..3]");  
15:   qty=inputInt.nextInt();  
16:   }while(qty<1 || qty>3);  
Nah, sekarang kita sudah bisa membuat input validation yang sederhana. Semoga bermanfaat.

Java Inheritance/Pewarisan bag.2

Di sini kita akan memberikan contoh lain dari proses pewarisan di Java:
1:  class mahasiswa  
2:  {  
3:  public String nama="Joni";  
4:  }  
5:  class mhscuti extends mahasiswa  
6:  {  
7:  String nama="Amir";  
8:  public void cetak(String nama)  
9:  {  
10:   System.out.println(nama);  
11:   System.out.println(this.nama);  
12:  System.out.println(super.nama);  
13:  }  
14:  }  
15:  public class kuliah  
16:  {  
17:  public static void main(String[] ar){  
18:  mhscuti t=new mhscuti();  
19:  t.cetak("Wati");  
20:  }  
21:  }  
Ayo.... siapa yang bisa tebak hasilnya seperti apa? Betul sekali. Hasilnya:
Wati
Amir
Joni
Ada yang bisa menjelaskan kenapa hasilnya seperti itu? OK. akan saya jelaskan.... Yang membedakan hasilnya adalah ada keyword this dan super. Apa itu this dan super di java? kita akan bahas 3 baris yang fungsinya menampilkan di layar:
1:   System.out.println(nama);  
2:   System.out.println(this.nama);  
3:  System.out.println(super.nama);  

Baris 1: ditampilkan isi dari attribut nama. attribut nama ini diambil dari passing attribut oleh method utama di class utamanya. Attribut nama menerima value berupa "Wati". jadi hasil dari baris pertama adalah "Wati". Baris2: ditampilkan isi dari attribut nama tapi memakai awalan this di awal attrributnya. Fungsi dari 'this' ini adalah untuk mengambil attribut yang dimiliki oleh class tersebut. Kita berada di class mshCuti. Maka attribut 'nama' di sini maksudnya adalah attribut yang dimiliki class mshCuti, yaitu 'Amir'. Baris 3: ditampilkan isi dari attribut 'nama' yang diawali 'super'. 'super' ini menunjukkan bahwa kita akan mengambil attribut yang dimiliki oleh s'super class' dari class yang sedang berjalan. super class dari clas mshCuti adalah class 'mahasiswa'. Maka attribut yang diambil adalah atribut yang dimiliki oleh class 'mahasiswa', sehingga hasilnya adalah 'Joni'. Semoga membantu yang, bagi yang masih bingung tentang inheritance, this, dan super

Java Inheritance / Pewarisan

Kita akan membahas tentang inheritance atau pewarisan di Java. Setiap class di prmorgraman Java merupakan sebuah hierarki class. Class satu merupakan bagian dari class yang lain sehingga membentuk tingkatan atau hierarki Class. Dikenal ada istilah super classes dan sub classes. sub classes merupakan bagian dari super class. Inheritance atau pewarisan merupakan istilah yang mendefinisikan bahwa semua sifat yang dimiliki supre class akan otomatis diwariskan ke semua sub classes-nya. Sifat yang diwariskan biasanya berupa attribute dan method. Untuk lebih jelasnya, kita akan bahas dalam bentuk contoh: Kita akan buat sebuah class dengan nama Coin. Program seperti di bawah ini:
1:  class Coin  
2:  {  
3:   int value;  
4:   public int getValue()  
5:   {  
6:   return value;       
7:   }       
8:  }  
Di atas kita sudah membuat sebuah class, dengan mthod getValue(). Method terwebut akan mengembalikan sebuah nilai integer. Selanjutnya kita akan membuat sebuah class lagi yang nantinya kita buat sebagai pewarisan dari class Coin. Programnya di bawah ini:
1:  class Quarter extends Coin  
2:  {  
3:   public Quarter()  
4:   {  
5:   value=25;       
6:   }       
7:  }  
di atas kita sudah menciptakan sebuah class Quarter yang diwariskan dari class Coin. Pewarisan tersebut terlihat dari keyword extends. Karena attribut yang ada di class Coin sudah diwariskan ke dalam class Quarter, maka class Quarter memiliki attribut yang sama dengan class Coin. Sehingga manipulasi terhadap attribut tersebut berlaku untuk kedua class. Selanjutnya, kita buat Class utamanya. sebagai berikut:
1:  public class TestInher  
2:  {  
3:   public static void main(String[] args)  
4:   {  
5:   Quarter q=new Quarter();  
6:   System.out.println("Value is "+q.getValue());       
7:   }       
8:  }  
Kita buat instanisasi dari class Quarter. Kita panggil method yang ada yaitu getValue(); Hasil nya bisa dilihat di bawah ini:
25

Piramid Star

Menampilkan bintang/asterisk segitiga

*
**
***
****
*****
******
*******
********
********* 
Mari kita bedah logika bagaimana kita bisa menempilkan gambar di atas secara logika java. Kita memerlukan 2 buah looping/perulangan. Perulangan pertama untuk mengulang baris (10 baris) dan perulangan kedua untuk mengulang kolom (10 kolom).

Kode java-nya bisa dilihat di bawah ini:

1:  class segitiga{  
2:  public static void main(String[] argument){  
3:   for(int i=1;i<=10;i++)  
4:   {  
5:    for(int j=1;j<=i;j++)  
6:    System.out.print("*");  
7:    System.out.println();  
8:   }  
9:  }  
10:  }  
Menampilkan Bilangan Ganjil
Tidak berbeda jauh dengan praktikum sebelumnya, yaitu menampilkan bilangan genap, bilangan ganjil juga memiliki logika yang sama dengan bilangan genap.
Bilangan ganjil adalah semua bilangan yang jika dibagi dengan dengan bilangan 2, maka sisa baginya adalah 1.

Kode Javanya bisa kita llihat di bawah ini:
1:  class genap{  
2:  public static void main(String[] argument){  
3:   //menampilkan bilangan genap dari 1 - 100  
4:   for(int i=1;i<=100;i++)  
5:   if(i%2==1)  
6:    System.out.print(i+" ");  
7:  }  
8:  }  
Hasilnya adalah: akan menampilkan bilangan ganjil dari 1 - 100.
Menampilkan Bilangan Genap
Pada praktikum kali ini, kita akan menampilkan seluruh bialngan genap dari 1-100.
Bilangan disebut bilangan genap jika bilangan tersebut kalau dibagi dengan bilangan 2 sisa baginya adalah 0.
Di fungsi matematika, sisa bagi dinyatakan dengan istilah modulus.
Di Bahasa Java, dikenal dengan syntax %

Jadi kita bisa mencari bilangan genap dengan cara:
bilangan % 2 ==0
Kode Javanya bisa kita llihat di bawah ini:
1:  class genap{  
2:  public static void main(String[] argument){  
3:   //menampilkan bilangan genap dari 1 - 100  
4:   for(int i=1;i<=100;i++)  
5:   if(i%2==0)  
6:    System.out.print(i+" ");  
7:  }  
8:  }  
Hasilnya adalah: akan menampilkan bilangan genap dari 1 - 100.
Multi Class di Java
Pada dasarnya, Java merupakan pemrograman berbasiskan class. Class yang mengacu pada teori dasar Pemrograman Berbasis Object ( Object Oriented Programming). Selanjutnya kita akan membahas tentang class di java dan interaksi antar class satu dengan class lainnya. Ini saya sebut sebagai Java Multi Class.

Pertama, kita akan membuat satu contoh sederhana class. Misalnya kita punya class bernama multiclass1. Anda bisa copy - paste dari code java di bawah ini:
1:  public class multiclass1  
2:  {  
3:   public static void main(String[] argument)  
4:   {  
5:     String tulisan="Ini Multi class 1";  
6:    System.out.println(tulisan);  
7:   }  
8:  }  
Simpan dan beri nama dengn multi multiclass1.java.

Langkah selanjutnya kita akan membuat Class baru dengan nama multiclass2.java. Anda bisa copy - paste dari code di bawah ini:
1:  public class multiclass2  
2:  {  
3:       public void cetak()  
4:       {  
5:            for(int m=0;m<=10;m++)  
6:            System.out.println("Ini Multi class 2");  
7:       }  
8:  }  
Sekarang kita sudah mempunyai 2 class yang berbeda. Kedua class tersebut selanjutnya akan kita hubungkan, sehingga class multiclass1 bisa memanggil class multiclass2.
Langkah Kedua, kita harus membuat Instance/ instanisasi dari class multiclass2.
Caranya:
multiclass2 c2Object = new multiclass2();
Denga begitu, maka kita sudah membuat instance dari class multiclass2 dengan nama c2Object.
Kita bisa melihat bahwa di class multiclass2 memiliki method cetak(). maka kita bisa memanggil method tersebut di class multiclass1 dengan cara:
c2Object.cetak();
Program lengkap dari class multiclass1.java adalah sebagai berikut:
1:  public class multiclass1  
2:  {  
3:   public static void main(String[] argument)  
4:   {  
5:     String tulisan="Ini Multi Class 1";  
6:     System.out.println(tulisan);  
7:     multiclass2 c2Object = new multiclass2();  
8:     c2Object.cetak();  
9:   }  
10:  }  

Setelah kita compile, maka hasil yang muncul di layar adalah:
Ini Multi class 1
Ini Multi class 2
Ini Multi class 2
Ini Multi class 2
Ini Multi class 2
Ini Multi class 2
Ini Multi class 2
Ini Multi class 2
Ini Multi class 2
Ini Multi class 2
Ini Multi class 2
Latihan 2c
Di bawah ini akan dibuktikan bahwa operasi penjumlahan terhadap Integer + String akan menghasilkan sebuah String baru hasil penggabungan antara Intger dan String.
Perhatikan contoh2c di bawah ini:
1:  public class contoh2c  
2:  {  
3:   public static void main(String[] argument)  
4:   {  
5:     int att=2012;  
6:     String nama2="Java";  
7:     System.out.println(nama2+att);  
8:   }  
9:  }  
Hasilnya:
Java2012
Kesimpulannya hasil operasi penjumlahan String dengan Integer adalah String yang merupakan penggabungan antara String dan Integer tersebut.
Latihan 2b.
Latihan ini akan membuktikan operasi dua buah String akan menghasilkan String.
Perhatikan contoh Program ini bawah ini:
1:  public class contoh2b  
2:  {  
3:   public static void main(String[] argument)  
4:   {  
5:     String nama1="Sinau";  
6:     String nama2="Java";  
7:     System.out.println(nama1+nama2);  
8:   }  
9:  }  
Hasil dari oeprasi di atas setelah dicompile dengan Java compiler adalah:
SinauJava  
Jadi bisa disimpulkan bahwa operasi String + String akan menghasilkan String baru.
Latihan 2a
Latihan ini akan menggambarkan beberapa operasi yang sering dilakukan dalam pemrograman. Operasi tersebut akan melibatkan operasi antara :
1. Integer + Integer
2. String + String
3. Integer + String

Perhatikan latihan2a di bawah ini:

1:  public class contoh2a  
2:  {  
3:   public static void main(String[] argument)  
4:   {  
5:     int angka1=90;  
6:     int angka2=40;  
7:     System.out.println(angka1+angka2);  
8:   }  
9:  }  
contoh program di atas akan menghasilkan output:
130 
Biar lebih terlihat menarik, maka program tersebut bisa kita lengkapi sebagai berikut:
1:  public class contoh2a  
2:  {  
3:   public static void main(String[] argument)  
4:   {  
5:     int angka1=90;  
6:     int angka2=40;  
7:     System.out.println("Hasil Penjumlahan "+angka1+" + "+angka2+" = "+(angka1+angka2));  
8:   }  
9:  }  
Hasilnya:
Hasil Penjumlahan 90 + 40 = 130 
Bisa ditarik kesimpulan bahwa Integer + Integer hasilnya adalah sebuah Integer.
Latihan 1
Pada Latihan ini akan dibahas basic syntax dalam bahasa pemrograman Java. Contoh ini hanya akan mengeluarkan output dilayar monitor dengan tulisan "Hello World".

 public class latihan1  
 {  
  public static void main(String[] argument)  
  {  
    System.out.println("Hello World");  
  }  
 }  
simpan file diatas dengan nama latihan1.java compile dengan cara: javac latihan1.java jalanin dengan cara: java latihan1
Cara meng-compile kode java adalah sebagai berikut:
1. javac [namafile.java]
2. java [namafile]

contoh:
nama file: contoh1.java

cara compilenya:
javac contoh1.java
java contoh1