Tuesday 29 April 2014

Socket Programming Java


Socket adalah sebuah Class yang disediakan oleh beberapa bahasa pemrograman. Dengan socket, sebuah aplikasi di suatu komputer dapat Tentu saja aplikasi di komputer yang dihubungi menerima koneksi juga
menggunakan socket. Dengan kata lain socket adalah suatu Class yang digunakan oleh aplikasi untuk saling berhubungan. berikut ini menunjukkan bagaimana suatu aplikasi berhubungan dengan aplikasi lainnya.
Paradigma pada aplikasi jaringan berlaku model client-server. Aplikasi yang menginisialisasi koneksi, disebut aplikasi client. Sedangkan aplikasi yang menerima inisialisasi disebut sebagai aplikasi server. Oleh karena itu, jika kita membangun suatu aplikasi jaringan yang lengkap, maka kita harus membuat aplikasi client maupun aplikasi server.
Lebih lanjut mengenai socket, ada dua jenis socket yang bisa digunakan untuk membangun aplikasi, yakni TCP Socket dan UDP Socket. Perbedaan utamanya adalah, di model TCP digunakan konsep connection oriented dan reliable data transfer, sedangkan di model UDP digunakan konsep connectionless oriented dan unreliable data transfer. Sebuah aplikasi dapat menggunakan salah satu dari jenis Socket tersebut disesuaikan dengan peruntukan aplikasi tersebut. Aplikasi berbasis TCP biasanya adalah aplikasi yang membutuhkan ketepatan data hingga 100% tapi tidak memperdulikan
lama pengiriman, sedangkan aplikasi berbasis UDP biasanya adalah aplikasi yang tidak terlalu mempedulikan ketepatan data tapi sangat peduli dengan delay pengiriman. Contoh aplikasi TCP adalah web browser, sedangkan UDP adalah Video Converence.
     Untuk membangun aplikasi hal pertama yang perlu dilakukan adalah menganalisa jenis aplikasi kita, kebutuhan bandwidth, kebutuhan ketersampaian data dan sensitifitas terhadap delay. Berdasarkan hal ini kita bisa menentukan protokol apa yang kita gunakan, entah TCP atau UDP.

2. Pemrograman Socket Menggunakan TCP

Cara kerja aplikasi yang menggunakan TCP dapat digambarkan oleh di bawah ini :
Detail dari proses tersebut adalah :
  1. Untuk bisa melakukan koneksi client server, program server harus berjalan terlebih dahulu
  2. Di sisi server disediakan sebuah socket, yang disebut welcoming socket yang fungsinya untuk mendeteksi adanya permintaan koneksi dari sisi client. 
  3. Di sisi client terdapat client socket. Jika ingin menghubungi server, maka melalui client socket-nya, client membuat inisialisai koneksi ke welcoming socket milik server, dengan mode three-way handshake.
  4. Setelah welcoming socket menerima inisialisasi koneksi dari client socket, aplikasi server akan membuat connection socket di sisi server. Dengan connection socket ini, client socket dan connection socket berinteraksi satu sama lain untuk mengirim dan menerima data.
  5. Client membaca data yang dikirim oleh server dari client socket-nya. Kemudian menampilkan data tersebut di monitor.
3. Pemrograman Socket Menggunakan UDP

Contoh aplikasi untuk UDP socket berikut ini menggunakan kasus yang sama dengan kasus yang digunakan oleh TCP socket, yaitu :

  1. Client membaca inputan dari keyboard, kemudian mengirimkan hasilnya ke server melalui socket-nya.
  2. Server membaca data yang dikirim oleh client di connection socket
  3. Server mengubah data menjadi huruf besar
  4. Server mengirimkan data yang telah diubah menuju client melalui socket-nya.
  5. Client membaca data yang dikirim oleh server dari client socket-nya. Kemudian menampilkan data tersebut di monitor

Perbedaan utama antara aplikasi berbasis TCP dengan aplikasi berbasis UDP adalah di aplikasi UDP tidak ada welcoming socket. Pada UDP tidak ada socket khusus untuk permintaan inisialisai koneksi. Setiap data yang datang ditangani lansung oleh server socket.


Berikut ini adalah contoh sederhana Socket Programming  :
Server.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 *
 * @author Jeffrey
 */
public class Server {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        ServerSocket server = null;
        Socket client;
        try {
            server = new ServerSocket(1234);
        } catch (IOException ie) {
            System.out.println("Cannot open socket.");
            System.exit(1);
        }
        String temp;
        while(true) {
            try {
                client = server.accept();
                OutputStream clientOut = client.getOutputStream();
                PrintWriter pw = new PrintWriter(clientOut, true);
                InputStream clientIn = client.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(clientIn));
                temp = br.readLine();
                System.out.println(temp);
                pw.println(temp);
                br.close();
                pw.close();
                clientIn.close();
                clientOut.close();
            } catch (IOException ie) {
                ie.printStackTrace();
            }
        }
    }
}
Client.java


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ConnectException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/**

 *

 * @author Jeffrey

 */

public class Client {

    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) throws UnknownHostException, IOException {

        String temp = "";

        do {

            try {

                Socket client = new Socket(InetAddress.getLocalHost(),1234);

                InputStream clientIn = client.getInputStream();

                OutputStream clientOut = client.getOutputStream();

                PrintWriter pw = new PrintWriter(clientOut, true);

                BufferedReader br = new BufferedReader(new InputStreamReader(clientIn));

                BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));

                System.out.println("Type a message for the server: ");

                temp = stdIn.readLine();

                pw.println(temp);

                System.out.println("Server message: ");

                System.out.println(br.readLine());

                pw.close();

                br.close();

                client.close();

            } catch (ConnectException ce) {

                System.out.println("Cannot connect to the server.");

            } catch (IOException ie) {

                System.out.println("I/O Error.");

            }

        }

        while (!temp.matches("EXIT"));

    }

}

Pertama membuat class server dengan source code yang telah diketikkan :




 lalu membuat class yang kedua untuk client dengan source code yang telah diketikkan :



pertama harus Run File yang code server dengan cara klik kanan > Run File , setelah itu baru Run File yg code client , maka akan keluar 2 output seperti gambar dibawah ini :

Output dari Client :

Sumber : http://tutorialpemrograman.wordpress.com/2009/04/25/socket-programming-using-java/


1 comments:

permisi gan, saya ada sedikit tulisan mengenai protokol websocket dalam bahasa java berikut: http://datacomlink.blogspot.co.id/2015/11/script-java-websocket-rfc-6455-server.html ditunggu feedback-nya ya gan, semoga menambah wawasan bersama.. terima kasih gan..

Post a Comment

Twitter Delicious Facebook Digg Stumbleupon Favorites More