membangun aplikasi client-server menggunakan java


java logo dalam keseharian, mungkin kita dah sering denger aplikasi client server, nah lantas apa dan bagaimana maksudnya dengan aplikasi client server? dan gimana bikinnya dalam java? sulitkah? atau mudah? ato, ato, ato, dan ato….

alah, gak usah takut, di java ada sebuah teknologi bernama RMI (Remote Method Invocation), teknologi ini digunakan untuk memisahkan aplikasi menjadi client dan server. inti dari RMI adalah mekanisme dimana kita bisa mengakses metode object server di client, wew bingung? hehe, mending kita liat contohnya biar gak pusing πŸ˜€

misalkan kita bikin aja aplikasi SayHello, jadi client memberi input nama, trus server akan mengolah dan memberikan respon berupa string “Hello “+nama πŸ˜€ , simple kan? hehe gak usah susah-susah dulu lah, yang penting tau konsep πŸ˜€

sekarang kita buat sebuah interface untuk commonnya ( maksudnya itu, interface ini bakal digunakan untuk client dan server), misal karena kita coba mo buat aplikasi SayHello, jadi gak usah rumit-rumit cukup seperti ini saja :

package echo.gokil.membangun.clientserver.common;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface SayHello extends Remote {

    public String sayHello(String name) throws RemoteException;
}

untuk membuat interface yang akan dijadikan sebagai object rmi, kita harus membuat interface dari interface Remote dan semua metode harus throw RemoteException, jadi ingat jangan lupa πŸ˜€ . setelah itu kita buat servernya, dan untuk itu kita buat implementasi dari interface SayHello tadi :

package echo.gokil.membangun.clientserver.server;

import echo.gokil.membangun.clientserver.common.SayHello;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class SayHelloServer extends UnicastRemoteObject implements SayHello {

    public SayHelloServer() throws RemoteException {
        super();
    }

    public String sayHello(String name) throws RemoteException{
        return "Hello " + name;
    }
}

nah pertanyaannya kenapa harus meng-extend UnicastRemoteObject? yup karena class ini akan kita export ke rmi untuk dishare ke client, maka dari itu semua object yang akan di export oleh rmi harus anak class dari UnicastRemoteObject, dan selain itu untuk kontruktornya harus throw RemoteException πŸ˜€

nah sekarang kita buat aplikasi servernya :

package echo.gokil.membangun.clientserver.server;

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Main {

    public static void main(String[] args) {
        try {
            Registry registry = LocateRegistry.createRegistry(1099);
            registry.rebind("sayhello", new SayHelloServer());
            System.out.println("server berhasil dijalankan");
        } catch (RemoteException re) {
            System.err.println("server rmi gagal dijalankan");
        }
    }
}

nah untuk membuat server dalam rmi, dikenal dengan Registry, dan untuk membuatnya kita menggunakan class LocateRegistry dan menggunakan metode createRegistry, untuk parameternya itu menandakan parameter nomor port yang akan kita gunakan sebagai port server, jika port sudah digunakan maka akan terjadi error, oleh karena itu pastikan kalo port tidak digunakan, dan biasanya untuk rmi menggunakan port 1099. setelah itu untuk menshare object ke registry gunakan metode rebind dengan parameter key dan object yang akan diexport, diatas gw pake key “sayhello” dan objectnya SayHelloServer, jadi nanti di client kita memanggil objectnya menggunakan key “sayhello”.

sekarang kita buat clientnnya :

package clientrmi;

import echo.gokil.membangun.clientserver.common.SayHello;
import java.rmi.AccessException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Main {

    public static void main(String[] args) {
        try {

            Registry registry = LocateRegistry.getRegistry("localhost", 1099);
            SayHello sayHello = (SayHello) registry.lookup("sayhello");

            System.out.println(sayHello.sayHello("eko kurniawan"));

        } catch (NotBoundException ex) {
            ex.printStackTrace();
        } catch (AccessException ex) {
            ex.printStackTrace();
        } catch (RemoteException re) {
            System.err.println("tak bisa terkoneksi ke server");
        }
    }
}

nah untuk membaut client, sama halnya dengan membaut server kita juga perlu membaut Registry, api dengan menggunakan metode getRegistry bukan createRegistry, dan untuk parameternya berisikan host dan port yang digunakan di server, misal host server gw “localhost” dan portnya 1099 (seperti pada server tadi), nah setelah itu untuk mendapatkan object yang diexport dari server kita gunakan metode lookup dengan parameter key yang tadi digunakan dalam server.

nah sekarang coba jalankan servernya, setelah itu jalankan clientnya, maka akan muncul tulisan seperti ini :

run:
Hello eko kurniawan
BUILD SUCCESSFUL (total time: 0 seconds)

gampangkan? gak susah buat aplikasi client server πŸ˜€

download file latihannya

enjoy :mrgreen:

Iklan

38 pemikiran pada “membangun aplikasi client-server menggunakan java

  1. wah…
    gak ngerti..
    kalo server client di java, masih menggunakan socket..

    kalo da ber remote gini mah lom sampe..

    hehe..

  2. sorry bos.. kemaren ga lihat codingannya ..padahal ada tulisan ‘localhost’ πŸ™‚ ….. kok jadi tiga project ya boss.. kenapa ga cuma dua.. (satu server satu lagi client) ??

    belum nyoba beda kompi… klo satu kompi dah jalan boss (bukan kompinya yang jalan boss). πŸ˜€

    thks before(nuhun…)

  3. hello mr echo …
    in my company .. we have an application that already deployed by some kind of vendor .. and of course it’s closed source ..! they provide us some device ! let say time attendance device that record by recognizing hand pattern. the problem is .. we want to extend our application with java (already made).. and we have a problem how to access those machine to pull or retrieve the datas in it’s storage e.g ROM. we guess they using some kind of socket programming .. i assumed .. yes because .. i already scanned those device with port scanner and it’s open a few port such tcp and udp port. i created some small java socket and trying to access and making communication with those device .. but ..seems no respon .. did i miss something ..! any clue for this “shit” ?
    thank you in advance mr echo.

    regard

    dygorgonites

  4. oke bro, thaks untuk tulisannya moga tambah banyak peminat java.
    ilmu biar tambah manfaat kalo dibagi2. moga tidak bosan2, bikin ulasan java

  5. Ping balik: kuliinternet » botd 14 feb

  6. kalau misal project eMovie rental nya mas echoo langsung dibuat multi user bisa? jadi dipake untuk 2 pc terus database nya diarahin ke salah satu pc nya? itu multi user ato client server ?
    Kok tambah bingung ya…he..he…

  7. itu sich bukan client-server πŸ˜€
    tetep single user

    client server tuh yang server ngelakukan
    proses manipulasi data ke database
    dan client ngerequest ke server
    artinya client gak langsung ngakses ke database
    tapi harus lewat server πŸ˜€

  8. MAs …klau server ma client nya di beda laptop yg terhubung pake wireless bisa ga???conToh ny untuk program aplikasi chatting ….kalu bisa gmn caranya???jelasin dunk …..tcp/ip ny harus sama kah????

    Thx …….

  9. Ping balik: Membangun Aplikasi Client – server Menggunakan Java .. « poenya ninT

  10. Mas mau nanya setelah saya jalanin kok rmi gagal dijalankan terus ya.. pdahal saya implementasikan sama persis seperti yang ada di artikel mas.. mohon pencerahannya.. makasih..

      • Setelah saya running main dari server-rmi yang keluar malah ini mas..

        java.rmi.server.ExportException: Port already in use: 1099; nested exception is:
        java.net.BindException: Address already in use: JVM_Bind
        at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:310)
        at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:218)
        at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:393)
        at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:129)
        at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:190)
        at sun.rmi.registry.RegistryImpl.setup(RegistryImpl.java:92)
        at sun.rmi.registry.RegistryImpl.(RegistryImpl.java:78)
        at java.rmi.registry.LocateRegistry.createRegistry(LocateRegistry.java:186)
        at echo.gokil.membangun.clientserver.server.Main.main(Main.java:11)
        Caused by: java.net.BindException: Address already in use: JVM_Bind
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359)
        at java.net.ServerSocket.bind(ServerSocket.java:319)
        at java.net.ServerSocket.(ServerSocket.java:185)
        at java.net.ServerSocket.(ServerSocket.java:97)
        at sun.rmi.transport.proxy.RMIDirectSocketFactory.createServerSocket(RMIDirectSocketFactory.java:27)
        at sun.rmi.transport.proxy.RMIMasterSocketFactory.createServerSocket(RMIMasterSocketFactory.java:333)
        at sun.rmi.transport.tcp.TCPEndpoint.newServerSocket(TCPEndpoint.java:649)
        at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:299)
        … 8 more
        server rmi gagal dijalankan

        Mohon pencerahannya.. trima kasih..

  11. mas, saya buat aplikasi dengan rmi, tapi ko’ ga bisa import file interfacenya ya?
    yg seperti ini:
    import echo.gokil.membangun.clientserver.common.SayHello;
    knp kiraΒ²?

    apa harus pjg jg seperti ini packagenya?
    package echo.gokil.membangun.clientserver.common;

  12. mw nanya lg ni mas,
    klo kita mw pake db mySql, trus kita bikin class Koneksinya di server aja atau gmn?

    nah, kalau ditaruh di server, trus client ngakses class koneksinyanya gmn?

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s