Pages

11 Maret 2013

Tutorial Membuat Program Client - Server Sederhana Dengan Java


Sebelum memulai tutorial sesuai judul di atas, sebenernya apa sih socket itu? Sederhananya socket adalah object / class pada end system yang berfungsi melakukan bind terhadap suatu port dari komunikasi dua arah yang terjadi pada suatu jaringan. Port-nya sendiri dapat kita yang tentukan sendiri atau pun menggunakan port yang sudah ada yang tentunya sesuai aturan yang telah ada.

Berarti program socket itu? program socket  itu sendiri adalah program yang dapat menghubungkan antar proses baik dalam satu end system maupun tidak.

Pada program ini server hanya akan me-listen program client dan menjawab client sesuai input dari program client sementara client akan memiliki contoh output dan kasus seperti di bawah:


Client (C), Server (S)
kasus 1:
C: ini client
S: ini server, masukkan username
C: admin
S: selamat datang admin

kasus 2:
C: ini client
S: ini server, masukkan username
C: user
S: selamat datang user

kasus 3:
C: ini client
S: ini server, masukkan username
C: saya
S: username tidak diketahui

kasus  4:
C: saya
S: perintah tidak diketahui

kasus 5:
C: exit
(kedua program client - server keluar )

Berikut source code dan penjelasan program server nya

package tugas_server;

import java.io.IOException;
// ObjectInputStream merupakan suatu class dari java yang berguna untuk
// membaca object/data (contoh string) yang diinputkan dari program lain
import java.io.ObjectInputStream;
// ObjectOutputStream merupakan suatu class dari java yang berguna untuk
// menuliskan object/data (contoh string) untuk dibaca program lain
import java.io.ObjectOutputStream;
// ServerSocket adalah class socket khusus untuk server
import java.net.ServerSocket;
// Socket adalah class socket biasa
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Agung
 */
public class Tugas_Server {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            // Inisialisasi Object ServerSocket dengan me-set port 5111.
            ServerSocket ss = new ServerSocket(5111);
            // Deklarasi socket yang nantinya akan menampung socket dari user.
            Socket s;
            // Deklarasi string yang untuk menampung hasil bacaan dari client.
            String balasan;
            String balasan2;
            
            // Inisialisasi Object Input dan Output Stream.
            ObjectInputStream in = null;
            ObjectOutputStream out = null;
            
            // Fungsi bawaan dari class ServerSocket yang me-return object socket
            // Fungsi ini menandakan bahwa program client dan server sudah terhubung
            s = ss.accept();
          
            // Mengalokasi memory baru untuk ObjectOutputStream.
            out = new ObjectOutputStream(s.getOutputStream());
            // Fungsi bawaan ObjectOutputStream untuk membersihkan isi memory.
            out.flush();
            
            // Mengalokasi memory baru untuk ObjectInputStream.
            in = new ObjectInputStream(s.getInputStream());
            
            balasan = "";
            balasan2 = "";
            
            while(true)
            {
                balasan = "";
                balasan2 = "";
                balasan = ReadMessage(in);
                // Program akan berhenti sampai ada input "exit" dari client.
                if(balasan.equals("exit")) break;
                else
                {
                    if(balasan.equals("ini client"))
                    {
                        SendMessage("ini server, masukkan username", out);
                        balasan2 = ReadMessage(in);
                        if(balasan2.equals("admin")) SendMessage("selamat datang admin", out);
                        else
                        {
                            if(balasan2.equals("user")) SendMessage("selamat datang user", out);
                            else SendMessage("username tidak diketahui", out);
                        }
                    }
                    else
                    {
                        SendMessage("perintah tidak diketahui", out);
                    }
                }
            }
            
            // Menutup semua stream dan socket.
            in.close();
            out.close();
            s.close();
            ss.close();
        } catch (IOException ex) {
            Logger.getLogger(Tugas_Server.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    // Fungsi untuk membaca input dari client.
    public static String ReadMessage(ObjectInputStream in)
    {
        String reader = "";
        try {
            reader = (String) in.readObject();
        } catch (IOException ex) {
            Logger.getLogger(Tugas_Server.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Tugas_Server.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println(reader);
        // Fungsi ini me-return nilai string hasil bacaan.
        return reader;
    }
    
    // Fungsi untuk mengirim object / data kepada client
    public static void SendMessage(String word, ObjectOutputStream out)
    {
        try {
            out.writeObject(word);
            // Pembersihan isi memori untuk nantinya digunakan kembali memori tersebut.
            out.flush();
        } catch (IOException ex) {
            Logger.getLogger(Tugas_Server.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
}

Berikut source code dan penjelasan program client nya

package tugas_client;

// Scanner merupakan class pada java untuk mengambil input dari keyboard.
import java.util.Scanner;
import java.io.IOException;
// Sama seperti pada program server
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
// Hanya membutuhkan class socket biasa
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Agung
 */
public class Tugas_Client {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
            // Pertama lakukan inisialisasi class socket. 
            Socket s = new Socket("localhost", 5111);
            // localhost merupakan lokasi program server yang akan berhubungan (me-listen).
            // sedangkan 5111 merupakan port yang digunakan program server
            // untuk dapat terhubung dengan program server maka port harus sama
            
            // Inisialisasi Object Input dan Output Stream.
            ObjectInputStream in = null;
            ObjectOutputStream out = null;
            
            // Inisialisasi Object Scanner dengan mengalokasikan memori baru.
            Scanner scanf = new Scanner(System.in);
            
            // Inisialisasi dan Deklarasi variabel yang akan menampung inputan 
            // yang akan dikirim dan hasil bacaan yang diterima dari program server
            String input = "";
            String balasan;
            String balasan2;
            
            // Mengalokasi memory baru untuk ObjectOutputStream.
            out = new ObjectOutputStream(s.getOutputStream());
            // Fungsi bawaan ObjectOutputStream untuk membersihkan isi memory.
            out.flush();
            
            // Mengalokasi memory baru untuk ObjectInputStream.
            in = new ObjectInputStream(s.getInputStream());
            
            balasan = "";
            balasan2 = "";
            
            while(true)
            {
                balasan = "";
                balasan2 = "";
                input = scanf.nextLine();
                SendMessage(input, out);
                if(input.equals("exit")) break;
                else
                {
                    balasan = ReadMessage(in);
                    if(balasan.equals("ini server, masukkan username"))
                    {
                        input = scanf.nextLine();
                        SendMessage(input, out);
                        balasan2 = ReadMessage(in);
                    }
                }
            }
            
            // Menutup semua stream dan socket.
            in.close();
            out.close();
            s.close();
    }
    
    // Fungsi untuk mengirim input kepada server.
    public static void SendMessage(String word, ObjectOutputStream out)
    {
        try {
            out.writeObject(word);
            // Pembersihan isi memori untuk nantinya digunakan kembali memori tersebut.
            out.flush();
        } catch (IOException ex) {
            Logger.getLogger(Tugas_Client.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    // Fungsi untuk membaca balasan dari server.
    public static String ReadMessage(ObjectInputStream in)
    {
        String reader = "";
        try {
            reader = (String) in.readObject();
        } catch (IOException ex) {
            Logger.getLogger(Tugas_Client.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Tugas_Client.class.getName()).log(Level.SEVERE, null, ex);
        }
            System.out.println(reader);
            // Fungsi ini me-return nilai string hasil bacaan.
            return reader;
    }
    
} 

Sekian post gw ini. Semoga membantu. Jaa Ne!! :D

1 komentar: