Rabu, 03 Juli 2013

APLIKASI CLIENT SERVER J2ME

APLIKASI CLIENT SERVER


Apa itu Soket?
Soket merupakan fasilitas IPC (Inter Proses  Communication) untuk  aplikasi jaringan.
Model komunikasi dengan soket  digambarkan pada gambar dibawah ini.



Apa itu Soket?
Soket merupakan fasilitas IPC (Inter Proses  Communication) untuk  aplikasi jaringan.
Model komunikasi dengan soket  digambarkan pada gambar dibawah ini.


Agar suatu soket dapat berkomunikasi dengan soket lainnyanya, maka soket butuh diberi suatu alamat unik sebagai identifikasi. Alamat soket terdiri dari  Alamat IP dan Nomer Port. Contoh alamat soket adalah  192.10.10.1 :  5000, dimana nomer 5000 adalah nomer portnya. Alamat IP dapat menggunakan alamat Jaringan Lokal (LAN) maupun alamat internet. Jadi soket dapat digunakan  untuk IPC pada LAN maupun Internet.  Mengapa dibutuhkan nomer port? Apakah nomer IP komputer tujuan saja tidak cukup? Nomer port dibutuhkan karena proses yang berjalan pada suatu komputer umumnya lebih dari satu. Sehingga dibutuhkan tambahan informasi sebagai identifikasi proses yang hendak dihubungi. Jika IP computer diibaratkan adalah nomer telepon suatu perusahaan, maka nomer port adalah nomer ekstensinya.  Suatu proses yang hendak berkomunikasi dengan proses lain lewat mekanisme soket haruslah mengikatkan dirinya dengan salah satu port pada komputerny.  Pengikatan diri ini disebut dengan  binding.
Java menyediakan obyek  Socket  dan  ServerSocket  untuk komunikasi soket TCP. ServerSocket digunakan pada sisi aplikasi server, sedangkan  Socket digunakan baik pada sisi aplikasi server maupun  client. Berikut ini akan saya demokan pengiriman objek melalui socket, namun syaratnya objek yang akan dikirimkan melalui socket haruslah mengimplementasikan Serializable.
Pertama buat 3 buah project.
  1. Sebagai server
  2. Sebagai client
  3.  Sebagai tempat penampung kelas yang objeknya akan dikirim.


pertama kali kita buat form seperti gambar diatas. setelah itu deklarasikan variabel yang dibutuhkan yaitu :
 

 public abstract class clientdanserver extends javax.swing.JFrame implements Runnable{
    Socket client;
    ServerSocket server;
    BufferedReader Server_Reader,Client_Reader;
    BufferedWriter ServerWriter, Client_Writer;
 
implements Runnable ditambahkan pada saat proses pada button menambahkan fungsi Thread
thread disediakan oleh java untuk membuat aplikasi yang tangguh, karena memunyai fungsi dan tugas tersendiri. dengan adanya thread kita dapat membagi proses pada waktu bersamaan. thread biasa digunakan pada pemograman multitasking, networking.


kemudian kita masukkan fungsi-fungsi untuk koneksi dengan menggunakan syntax seperti dibawah

 private void client_connection ()
    {
        try {
            String ip = JOptionPane.showInputDialog("masukkan IP Adress");
            client = new Socket(ip, 2000);
            Combo_Box.setEnabled(false);
            Button_On.setText("disconnect");
            Server_Reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
            Server_Writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
        } catch (UnknownHostException ex) {
          System.out.println("accept failed");
          System.exit(-1);
        } catch (IOException ex) {
            Logger.getLogger(form.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
   
    private void read_connection()
    {
        try {
            try {
                try {
                    server = new ServerSocket(2000);
                    this.setTitle("please wait...");
                } catch (IOException ex) {
                  System.out.println("couldn't listen"); 
                  System.exit(-1);
                }
               
                client = server.accept();
                this.setTitle("connected" + client.getInetAddress());
            } catch (IOException ex) {
                System.out.println("accept failed");
                System.exit(-1);
            }
           
            Server_Reader = new BufferedReader(new InputStreamReader(client.getInputStream()) );
            Server_Writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
        } catch (IOException ex) {
           System.out.println("read filed");
           System.exit(-1);
        } 
    }
   
    private void disconnected_by_client()
    {
        try {       
            client.close();Server_Reader.close();            Server_Writer.close();
            Combo_Box.setEnabled(true);
            Button_On.setText("connect");
        } catch (IOException ex) {
            Logger.getLogger(form.class.getName()).log(Level.SEVERE, null, ex);
        }
       
       
    }
   
    private void stopped_by_server()
    {
        try {
            Server_Reader.close();
            Server_Writer.close();
            Button_On.setText("ON");
            this.setTitle("disconnected");
        } catch (IOException ex) {
            Logger.getLogger(form.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

pada bagian yang digaris bawahi merupakan syntax yang diketikkan. dan sisanya kita klik tanda balon (warning) kemudian pilih surround block with try catch.

pada bagian proses untuk komponen pallete digunakan syntax sebagai berikut
private void Combo_BoxItemStateChanged(java.awt.event.ItemEvent evt) {                                          
        if (Combo_Box.getSelectedItem().equals("server"))
        {
            Button_On.setText("ON");
            Text_Username.setText("Server");
        }
       
        else
        {
            Button_On.setText("Connect");
            Text_Username.setText("Client");
        }
    }                                         

    private void Button_OnActionPerformed(java.awt.event.ActionEvent evt) {                                         
        if (Button_On.getText().equals("Connect"))
        {
            Button_On.setText("DIsconnect");
            client_connection();
            Thread thread = new Thread(this) ;
            thread.start();
          
        }
        else if (Combo_Box.getSelectedItem().equals("Server"))
        {
            Button_On.setText("Off");
            read_connection();
            Thread thread = new Thread(this);
            thread.start();
        }
        else if (Button_On.getText().equals("Disconnect"))
        {
            disconnected_by_client();
        }
        else if(Button_On.getText().equals("off"))
        {
            stopped_by_server();
        }
    }                                        

    private void Button_SendActionPerformed(java.awt.event.ActionEvent evt) {                                           
        try {
          
                // TODO add your handling code here:
                Server_Writer.write(Text_Username.getText() + ": " + Text_Chat.getText());
                Server_Writer.newLine();
                Server_Writer.flush();
             
            } catch (IOException ex){
                Logger.getLogger(form.class.getName()).log(Level.SEVERE, null,ex);
            }
      
            List_chat.add("me: " + Text_Chat.getText());
            Text_Chat.setText("" + Text_Chat.getText());
       
    } 

untuk lebih jelasnya dapat dilihat pada video tutorial CLICK TO VIEW THE VIDEO TUTORIAL