Tuesday, February 18, 2014

Socket Programming in Java on Linux

Baiklah, seperti yang telah saya sampaikan pada postingan sebelumnya, kali ini saya akan membagikan pengetahuan saya mengenai socket programming dalam bahasa Java di sistem operasi Linux. Lagi-lagi langkah-langkah yang akan disebutkan ini hanya bekerja pada sistem operasi Linux saja. Dan untuk kali ini, kita harus terlebih dahulu menginstall jdk untuk dapat mengcompile Java. Program yang akan saya demokan ada 2 buah, yang pertama tentang socket programming client-server dengan 1 client, dan yang 1 lagi dengan banyak client. Program yang dibuat hanyalah program chatting sederhana dimana server akan membalas chat yang dikirim oleh client dengan pesan yang sama dengan yang dikirimkan.


Baiklah pertama-tama akan saya jelaskan bagaimana menginstall jdk.

  1. Pastikan komputer Anda terhubung dengan koneksi internet
  2. Buka terminal, ketikkan perintah sudo su lalu masukkan password Anda
  3. Ketikkan perintah apt-get install default-jdk, lalu enter maka akan ad proses yang berlangsung
  4. Ketik Y untuk melanjutkan lalu enter, maka kita akan memulai download jdk
  5. Tunggu hingga proses download selesai, maka kita sudah dapat mengcompile java
Setelah menginstall jdk bagi yang belum menginstallnya, kita baru bisa mengcompile source code java, baiklah sekarang mari kita memuat socket programming kita yang pertama
  1. Buka teks editor, copy paste source code berikut ini, lalu simpan dengan nama socket_server.java
  2.  //java server example  
     import java.io.*;  
     import java.net.*;  
     public class socket_server  
     {  
       public static void main(String args[])  
       {  
         ServerSocket s = null;  
         Socket conn = null;  
         PrintStream out = null;  
         BufferedReader in = null;  
         String message = null;  
         try  
         {  
           //1. creating a server socket - 1st parameter is port number and 2nd is the backlog  
           s = new ServerSocket(5000 , 10);  
           //2. Wait for an incoming connection  
           echo("Server socket created.Waiting for connection...");  
           //get the connection socket  
           conn = s.accept();  
           //print the hostname and port number of the connection  
           echo("Connection received from " + conn.getInetAddress().getHostName() + " : " + conn.getPort());  
           //3. get Input and Output streams  
           out = new PrintStream(conn.getOutputStream());  
           out.flush();  
           in = new BufferedReader(new InputStreamReader(conn.getInputStream()));  
           out.println("Welcome. Server version 1.0");  
           out.flush();  
           //4. The two parts communicate via the input and output streams  
           do  
           {  
             //read input from client  
             message = (String)in.readLine();  
             echo("client>" + message);  
             if(message != null)  
             {  
               out.println(message);  
             }  
             else  
             {  
               echo("Client has disconnected");  
               break;  
             }  
           }  
           while(!message.equals("bye"));  
         }  
         catch(IOException e)  
         {  
           System.err.println("IOException");  
         }  
         //5. close the connections and stream  
         try  
         {  
           in.close();  
           out.close();  
           s.close();  
         }  
         catch(IOException ioException)  
         {  
           System.err.println("Unable to close. IOexception");  
         }  
       }  
       public static void echo(String msg)  
       {  
         System.out.println(msg);  
       }  
     }  
     //sumber: http://www.binarytides.com/java-socket-programming-tutorial/  
    
  3. Buka terminal lalu ganti direktori ke tempat Anda menyimpan source code di atas, lalu ketikkan perintah javac socket_server.java untuk mengcompile
  4. Lalu ketikkan perintah java socket_server untuk meng-run hasil compile tadi
  5. Untuk mengetes program ini, bukalah terminal baru lalu ketikkan perintah telnet localhost 5000
  6. Jika Anda medapatkan tampilan seperti diatas berarti Anda sudah berhasil, langkah berikutnya adalah Anda tinggal mencoba mengetikkan pesan lalu akan segera dibalas oleh server dengan pesan yang sama
  7. Yap, Anda telah berhasil membuat client-server menggunakan Java. Dan ini adalah tampilan apabila Anda menutup terminal client 
Baiklah berikutnya adalah langkah-langkah membuat socket programming menggunakan Java dengan server yang dapat menangani beberapa client.
  1. Buka teks editor, copy paste source code berikut ini, lalu simpan dengan nama socket_server2.java
  2.  //java server example  
     import java.io.*;  
     import java.net.*;  
     public class socket_server2  
     {  
       public static void main(String args[])  
       {  
         ServerSocket s = null;  
         Socket conn = null;  
         try  
         {  
           //1. creating a server socket - 1st parameter is port number and 2nd is the backlog  
           s = new ServerSocket(5000 , 10);  
           //2. Wait for an incoming connection  
           echo("Server socket created.Waiting for connection...");  
           while(true)  
           {  
             //get the connection socket  
             conn = s.accept();  
             //print the hostname and port number of the connection  
             echo("Connection received from " + conn.getInetAddress().getHostName() + " : " + conn.getPort());  
             //create new thread to handle client  
             new client_handler(conn).start();  
           }  
         }  
         catch(IOException e)  
         {  
           System.err.println("IOException");  
         }  
         //5. close the connections and stream  
         try  
         {  
           s.close();  
         }  
         catch(IOException ioException)  
         {  
           System.err.println("Unable to close. IOexception");  
         }  
       }  
       public static void echo(String msg)  
       {  
         System.out.println(msg);  
       }  
     }  
     class client_handler extends Thread  
     {  
       private Socket conn;  
       client_handler(Socket conn)  
       {  
         this.conn = conn;  
       }  
       public void run()  
       {  
         String line , input = "";  
         try  
         {  
           //get socket writing and reading streams  
           DataInputStream in = new DataInputStream(conn.getInputStream());  
           PrintStream out = new PrintStream(conn.getOutputStream());  
           //Send welcome message to client  
           out.println("Welcome to the Server");  
           //Now start reading input from client  
           while((line = in.readLine()) != null && !line.equals("."))  
           {  
             //reply with the same message, adding some text  
             out.println("I got : " + line);  
           }  
           //client disconnected, so close socket  
           conn.close();  
         }  
         catch (IOException e)  
         {  
           System.out.println("IOException on socket : " + e);  
           e.printStackTrace();  
         }  
       }  
     } 
    //sumber: http://www.binarytides.com/java-socket-programming-tutorial/   
    
  3. Buka terminal lalu ganti direktori ke tempat Anda menyimpan source code di atas, lalu ketikkan perintah javac socket_server2.java untuk mengcompile
  4. Lalu ketikkan perintah java socket_server2 untuk meng-run hasil compile tadi
  5. Untuk mengetesnya, bukalah 3 terminal baru lalu ketikkan perintah telnet localhost 5000 pada masing-masing terminal, maka Anda seharusnya mendapatkan tampilan seperti ini
  6. Jika sudah mendapatkan tampilan seperti itu, sekarang Anda hanya perlu memasukkan pesan yang ingin dikirim maka server akan membalas dengan pesan yang sama.
Sumber:

1 comment: