Sabtu, 04 Agustus 2018

Membangun Aplikasi Client-Server TCP Sederhana


LISTING PROGRAM
simpleServer.java
import java.io.*;
import java.net.*;
public class simpleServer {
  public final static int TESTPORT = 5000;
  public static void main(String args[]) {
    ServerSocket checkServer = null;
    String line;
    BufferedReader is = null;
    DataOutputStream os = null;
    Socket clientSocket = null;
    try {
      checkServer = new ServerSocket(TESTPORT);
      System.out.println("Aplikasi Server hidup ...");
    } catch (IOException e) {
      System.out.println(e);
    }
    try {
      clientSocket = checkServer.accept();
      is = new BufferedReader(new
      InputStreamReader(clientSocket.getInputStream()));
      os = new DataOutputStream(clientSocket.getOutputStream());
    } catch (Exception ei) {
      ei.printStackTrace();
    }
    try {
      line = is.readLine();
      System.out.println("Terima : " + line);
      if (line.compareTo("salam") == 0) {
        os.writeBytes("salam juga");
      } else {
        os.writeBytes("Maaf, saya tidak mengerti");
      }
    } catch (IOException e) {
      System.out.println(e);
    }

    try {
      os.close();
      is.close();
      clientSocket.close();
    } catch (IOException ic) {
      ic.printStackTrace();
    }
  }
}

simpleClient.java
import java.io.*;
import java.net.*;
public class simpleClient {
  public final static int REMOTE_PORT = 5000;
  public static void main(String args[]) throws Exception {
    Socket cl = null;
    BufferedReader is = null;
    DataOutputStream os = null;
    BufferedReader stdin = new BufferedReader(new
    InputStreamReader(System.in));
    String userInput = null;
    String output = null;
    try {
      cl = new Socket(args[0], REMOTE_PORT);
      is = new BufferedReader(new
      InputStreamReader(cl.getInputStream()));
      os = new DataOutputStream(cl.getOutputStream());
    } catch(UnknownHostException e1) {
      System.out.println("Unknown Host: " + e1);
    } catch (IOException e2) {
      System.out.println("Erorr io: " + e2);
    }
    try {
      System.out.print("Masukkan kata kunci: ");
      userInput = stdin.readLine();
      os.writeBytes(userInput + "\n");
    } catch (IOException ex) {
      System.out.println("Error writing to server..." + ex);
    }
    try {
      output = is.readLine();
      System.out.println("Dari server: " + output);
    } catch (IOException e) {
      e.printStackTrace();
    }
    try {
      is.close();
      os.close();
      cl.close();
    } catch (IOException x) {
      System.out.println("Error writing...." + x);
    }
  }
}

LOGIKA PROGRAM
Program diatas dapat digunakan untuk membangun sebuah aplikasi  client-server TCP sederhana dengan menggunakan bahasa pemrograman java.

Server
import java.io.*;
import java.net.*;
Perintah diatas berfungsi untuk memanggil semua fungsi yang terdapat pada library java.io dan java.net. Library java.io yaitu library untuk proses input dan output melalui data stream, sedangkan java.net yaitu library untuk implementasi jaringan.

public class simpleServer {
  public final static int TESTPORT = 5000;
Nama class pada program ini yaitu simpleServer, dan kita akan mendeklarasikan port 5000 yang akan digunakan sebagai jalur komunikasi.

  public static void main(String args[]) {
    ServerSocket checkServer = null;
    String line;
    BufferedReader is = null;
    DataOutputStream os = null;
    Socket clientSocket = null;
Perintah diatas berfungsi untuk mendeklarasikan variable yang akan dipakai di dalam program ini, yaitu: checkServer sebagai ServerSocket yang bernilai null (kosong), is sebagai BufferedReader yang bernilai null (kosong), os sebagai DataOutputStream yang bernilai null (kosong), clientSocket sebagai socket yang bernilai null (kosong), dan line dengan tipe data string.

    try {
      checkServer = new ServerSocket(TESTPORT);
      System.out.println("Aplikasi Server hidup ...");
    } catch (IOException e) {
      System.out.println(e);
    }
Pada blok try pertama, checkServer akan diberi nilai yaitu berupa nomor port. Selanjutnya server akan menampilkan output “Aplikasi Server hidup ...”. Jika ada error yang terjadi pada saat server dijalankan, maka error tersebut akan ditangani oleh catch.

    try {
      clientSocket = checkServer.accept();
      is = new BufferedReader(new
      InputStreamReader(clientSocket.getInputStream()));
      os = new DataOutputStream(clientSocket.getOutputStream());
    } catch (Exception ei) {
      ei.printStackTrace();
    }
Blok try kedua digunakan untuk inisiasi is dan os sebagai objek input dan output, serta untuk menerima request client dengan clientsocket.

    try {
      line = is.readLine();
      System.out.println("Terima : " + line);
      if (line.compareTo("salam") == 0) {
        os.writeBytes("salam juga");
      } else {
        os.writeBytes("Maaf, saya tidak mengerti");
      }
    } catch (IOException e) {
      System.out.println(e);
    }
Blok try ketiga digunakan untuk menerima dan mengirim pesan. Variable line digunakan sebagai variable penampung inputan dari client, lalu server akan mencetak “Terima : “ diikuti dengan pesan yang diterima dari client.
Jika server menerima pesan “salam”, maka server akan membalas pesan “salam juga”. Jika server menerima pesan lainnya maka server akan membalas “Maaf, saya tidak mengerti”.

    try {
      os.close();
      is.close();
      clientSocket.close();
    } catch (IOException ic) {
      ic.printStackTrace();
    }
  }
}
Blok try keempat digunakan untuk menutup input, ouput, dan koneksi.


Client
import java.io.*;
import java.net.*;
Perintah diatas berfungsi untuk memanggil semua fungsi yang terdapat pada library java.io dan java.net. Library java.io yaitu library untuk proses input dan output melalui data stream, sedangkan java.net yaitu library untuk implementasi jaringan.

public class simpleClient {
  public final static int REMOTE_PORT = 5000;
Nama class pada program ini yaitu simpleClient, dan kita akan mendeklarasikan port 5000 yang akan digunakan sebagai jalur komunikasi.

  public static void main(String args[]) throws Exception {
    Socket cl = null;
    BufferedReader is = null;
    DataOutputStream os = null;
    BufferedReader stdin = new BufferedReader(new
    InputStreamReader(System.in));
    String userInput = null;
    String output = null;
Perintah diatas berfungsi untuk mendeklarasikan variable yang akan dipakai di dalam program ini, yaitu: cl sebagai Socket yang bernilai null (kosong), is sebagai BufferedReader yang bernilai null (kosong), os sebagai DataOutputStream yang bernilai null (kosong), serta userInput dan output yang bernilai null (kosong) dengan tipe data string.

    try {
      cl = new Socket(args[0], REMOTE_PORT);
      is = new BufferedReader(new
      InputStreamReader(cl.getInputStream()));
      os = new DataOutputStream(cl.getOutputStream());
    } catch(UnknownHostException e1) {
      System.out.println("Unknown Host: " + e1);
    } catch (IOException e2) {
      System.out.println("Erorr io: " + e2);
    }
Pada blok try pertama digunakan untuk memulai koneksi dengan server menggunakan port yang telah dideklarasikan sebelumnya. Jika terjadi error pada saat koneksi, maka catch akan berjalan dan memberikan pesan error yang terjadi.

    try {
      System.out.print("Masukkan kata kunci: ");
      userInput = stdin.readLine();
      os.writeBytes(userInput + "\n");
    } catch (IOException ex) {
      System.out.println("Error writing to server..." + ex);
    }
Blok try kedua digunakan untuk menuliskan atau mengirim pesan ke server. Pertama program akan mencetak “Masukkan kata kunci: “. Kemudian client akan menginput pesan yang akan disimpan di dalam variable userInput, dan akan dikirimkan ke server dengan perintah os.writeBytes().

    try {
      output = is.readLine();
      System.out.println("Dari server: " + output);
    } catch (IOException e) {
      e.printStackTrace();
    }
Blok try ketiga digunakan untuk menerima pesan dari server dan menampilkannya. Program akan mencetak string “Dari server: “ yang diikuti dengan variable output, yang merupakan pesan dari server.  

    try {
      is.close();
      os.close();
      cl.close();
    } catch (IOException x) {
      System.out.println("Error writing...." + x);
    }
  }
}
Blok try keempat digunakan untuk menutup input, ouput, dan koneksi.


OUTPUT PROGRAM
1. Compile terlebih dahulu file simpleServer.java, kemudian compile simpleClient.java






2. Jalankan sisi Server terlebih dahulu, setelah server hidup kemudian buka console shell yang baru lalu jalankan sisi Server. Selanjutnya ketikkan "salam" pada sisi Client, maka Server akan menerima pesan dari Client.








3. Ketikkan pesan yang berbeda pada sisi Client, maka akan tampil seperti berikut.





Tidak ada komentar:

Posting Komentar