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