Skip navigation


Salah satu cara mengatasi kemungkinan timeout yang diakibatkan oleh blocking pada postingan sebelumnya adalah dengan menggunakan multithread.

Proses streaming ditangani oleh sebuah Thread yakni

package simpleserver;

import java.io.*;
import java.net.*;
import java.util.*;

public class SocketThread implements Runnable {

    private Socket socket;

    public SocketThread(Socket socket) {
        this.socket = socket;
    }

    public void run() {

        //Membuat stream input/output dari client socket
        PrintWriter out;
        try {
            out = new PrintWriter(this.socket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));

            Thread.sleep(3000);

            //Menampilkan string yang dikirim oleh client
            System.out.println(in.readLine());
            //Mengirimkan string "Hello!" ke client
            out.println("Hello World, Client!");

            //Menutup koneksi dan stream
            out.close();
            in.close();
            this.socket.close();
        } catch (IOException ex) {

        } catch (InterruptedException ex){

        }

    }
}

Di servernya tinggal

public static void main(String[] args) throws IOException, InterruptedException {
        //Membuat Server Socket
        ServerSocket serverSocket = null;
        try {
            //Mencoba untuk binding ke port 4444
            serverSocket = new ServerSocket(4444);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 4444.");
            System.exit(1);
        }

        //Membuat client Socket
        Socket clientSocket = null;
        while (true) {
            try {
                //Mencoba menerima koneksi socket dari client
                clientSocket = serverSocket.accept();
                SocketThread s = new SocketThread(clientSocket);
                s.start();
            } catch (IOException e) {
                System.err.println("Accept failed.");
                System.exit(1);
            }

        }
    }

Dengan demikian setelah sebuah socket selesai melakukan blocking untuk mencoba menerima koneksi maka aplikasi akan membangkitkan sebuah thread sehingga thread utama dapat kembali melakukan blocking untuk socket yang baru selagi thread yang dibangkitkan melakukan aktivitas dengan koneksi socket yang baru saja aktif.
Update : kode di atas ada yang salah, harusnya pakai start bukan run.

One Comment

  1. pas, aq lg nyari ini. thnx u ….


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

%d blogger menyukai ini: