Jumat, 17 Juni 2016

Tugas Socket Progamming



TUGAS SOCKET PROGAMMING

      A.    TUJUAN PEMBELAJARAN
1.      Siswa memahami konsep aplikasi client server di jaringan.
2.      Mahasiswa memahami konsep pemprograman socket.
3.      Mahasiswa mampu melakukan socket programming dengan single thread dan multi thread

      B.     PERCOBAAN
1.      Single Thread
a.         Buat program socket pada java
C.1. Program Aplikasi HTTP Server sederhana
import java.io.IOException;
import java.net.ServerSocket;

public class TCPEchoServerThread {

    private static ServerSocket servSock;
    private static final int PORT = 1922;

    public TCPEchoServerThread() {
    }

    public void start() {
        try {
            servSock = new ServerSocket(PORT);

            while (true) {
                Thread clientThread = new Thread(new clientHandler(servSock.accept()));
                clientThread.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                System.out.println("Menutup koneksi....");
                servSock.close();
            } catch (IOException e) {
                System.out.println("Tidak dapat memustukan koneksi");
                e.printStackTrace();
                System.exit(1);
            }
        }
    }

    public static void main(String[] args) {
        TCPEchoServerThread es = new TCPEchoServerThread();
        System.out.println("Server telah berjalan di komputer ini pada port " +PORT);
        es.start();
    }
}

    public static void main(String[] args) {
        TCPEchoServerThread es = new TCPEchoServerThread();
        System.out.println("Server telah berjalan di komputer ini pada port " +PORT);
        es.start();
    }
}


C.2. Program Aplikasi Chat Server dengan menggunakan TCP
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPEchoServer{
    private static ServerSocket servSock;
    private static final int PORT = 2023;

    public static void main(String args[]) {
        System.out.println("Membuka socket.....\n");
        try {
            servSock = new ServerSocket(PORT);
        } catch (IOException e) {
            System.out.println("Gagal membuka port !!!");
            System.exit(1);
        }
        do {
            run();
        } while (true);
    }

    private static void run() {
        Socket link = null;
        try {

            link = servSock.accept();
            BufferedReader in = new BufferedReader(new
            InputStreamReader(link.getInputStream()));
            PrintWriter out = new PrintWriter(link.getOutputStream(), true);
            int numMessages = 0;
            String message = in.readLine();
            while (!message.equals("close")) {
                System.out.println("Pesan diterima : [" +message.toString() + "] dalam " + message.length() + " bytes");
                //System.out.println("Message received");
                numMessages++;
                out.println("Isi Pesan " + numMessages + ":" + message);
                message = in.readLine();
            }
            out.println(numMessages + " buah pesan telah diterima.");
            } catch (IOException e) {
            } finally {
            try {
                System.out.println("*********Menutup koneksi ****");
                link.close();
            } catch (IOException e) {
                System.out.println("Tidak dapat memustukan koneksi");
                System.exit(1);
            }
        }
    }
}

            } finally {
            try {
                System.out.println("*********Menutup koneksi ****");
                link.close();
            } catch (IOException e) {
                System.out.println("Tidak dapat memustukan koneksi");
                System.exit(1);
            }
        }
    }
}



C.3. Program Aplikasi Chat Client dengan menggunakan TCP
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCPEchoClient2 {
    private static String strHost;
    private static InetAddress host;
    private static final int PORT = 7788;

    public static void main(String args[]) {
        try {
            // host = InetAddress.getLocalHost();
            strHost = "192.168.43.26" ; // <- Masukan sesuai dengan tujuan
            host = InetAddress.getByName(strHost);
        } catch (UnknownHostException e) {
            System.out.println("Alamat tidak ditemukan");
            System.exit(1);
        }
        run();
    }

    private static void run() {
        Socket link = null;
        try {
            link = new Socket(host, PORT);
            BufferedReader in = new BufferedReader(new
            InputStreamReader(link.getInputStream()));
            PrintWriter out = new PrintWriter(link.getOutputStream(), true);
            BufferedReader userEntry = new BufferedReader(new InputStreamReader(System.in));
            String message, response;
            do {
                System.out.print("Masukkan pesan : ");
                message = userEntry.readLine();
                out.println(message);
                response = in.readLine();
                System.out.println("SERVER " + response);
            } while (!message.equals("close"));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                System.out.println("Menutup Koneksi.");
                link.close();
            } catch (IOException e) {
                System.out.println("Tidak dapat memutuskan koneksi!");
                System.exit(1);
            }
        }
    }
}

                System.out.println("SERVER " + response);
            } while (!message.equals("close"));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                System.out.println("Menutup Koneksi.");
                link.close();
            } catch (IOException e) {
                System.out.println("Tidak dapat memutuskan koneksi!");
                System.exit(1);
            }
        }
    }
}


b.        Buka wireshark dan jalankan wireshark filter protocol tcp
c.         Jalankan program clien dan sarver yang telah dibuat
d.        Amati sequence yang terjadi pada wireshark
2.      Multy Thread
a.         Buat program socket pada java
C.1. Program Utama (Main Program) Aplikasi Server dengan Multithread
import java.io.IOException;
import java.net.ServerSocket;

public class TCPEchoServerThread {

    private static ServerSocket servSock;
    private static final int PORT = 1922;

    public TCPEchoServerThread() {
    }

    public void start() {
        try {
            servSock = new ServerSocket(PORT);

            while (true) {
                Thread clientThread = new Thread(new clientHandler(servSock.accept()));
                clientThread.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                System.out.println("Menutup koneksi....");
                servSock.close();
            } catch (IOException e) {
                System.out.println("Tidak dapat memustukan koneksi");
                e.printStackTrace();
                System.exit(1);
            }
        }
    }

    public static void main(String[] args) {
        TCPEchoServerThread es = new TCPEchoServerThread();
        System.out.println("Server telah berjalan di komputer ini pada port " +PORT);
        es.start();
    }
}

            }
        }
    }

    public static void main(String[] args) {
        TCPEchoServerThread es = new TCPEchoServerThread();
        System.out.println("Server telah berjalan di komputer ini pada port " +PORT);
        es.start();
    }
}



C.2. Program Aplikasi Server Untuk Melayani Koneksi Client
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;

class clientHandler implements Runnable {

    private static int numConnections;
    private int connectionId = 0;
    Socket link;

    public clientHandler(Socket s) {
        connectionId = numConnections++;
        System.out.println("Melayani koneksi ke-"+ connectionId);
        link = s;
    }

    public void run() {
        PrintWriter out = null;
        BufferedReader in = null;
        int numMessages = 0;

        try {
            out = new PrintWriter(link.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(link.getInputStream()));
            String message=in.readLine();
            while (!message.equals("close") ) {
                System.out.println("Pesan diterima : [" +message.toString() + "] dari client " + connectionId +" dalam " + message.length() + " bytes");
                numMessages++;
                out.println("Isi Pesan " + numMessages + ":" + message);
                message = in.readLine();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            out.close();
            try {
                in.close();
                link.close();
                System.out.println("Menutup koneksi, #" + connectionId);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

                in.close();
                link.close();
                System.out.println("Menutup koneksi, #" + connectionId);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}



C.3. Program Aplikasi Chat Client dengan menggunakan TCP
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class TCPEchoClient2 {
    private static String strHost;
    private static InetAddress host;
    private static final int PORT = 7788;

    public static void main(String args[]) {
        try {
            // host = InetAddress.getLocalHost();
            strHost = "192.168.173.216" ;
            host = InetAddress.getByName(strHost);
        } catch (UnknownHostException e) {
            System.out.println("Alamat tidak ditemukan");
            System.exit(1);
        }
        run();
    }

    private static void run() {
        Socket link = null;
        try {
            link = new Socket(host, PORT);
            BufferedReader in = new BufferedReader(new
            InputStreamReader(link.getInputStream()));
            PrintWriter out = new PrintWriter(link.getOutputStream(), true);
            BufferedReader userEntry = new BufferedReader(new InputStreamReader(System.in));
            String message, response;
            do {
                System.out.print("Masukkan pesan : ");
                message = userEntry.readLine();
                out.println(message);
                response = in.readLine();
                System.out.println("SERVER " + response);
            } while (!message.equals("close"));
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                System.out.println("Menutup Koneksi.");
                link.close();
            } catch (IOException e) {
                System.out.println("Tidak dapat memutuskan koneksi!");
                System.exit(1);
            }
        }
    }
}

            try {
                System.out.println("Menutup Koneksi.");
                link.close();
            } catch (IOException e) {
                System.out.println("Tidak dapat memutuskan koneksi!");
                System.exit(1);
            }
        }
    }
}

b.        Buka wireshark dan jalankan wireshark filter protocol tcp
c.         Jalankan program clien dan sarver yang telah dibuat
d.        Amati sequence yang terjadi pada wireshark

      C.     HASIL DAN ANALISA
1.      Single Thread
Pada wireshark yang telah dijalankan akan muncul sequence yang dikirimkandari clien ke server dan dari server ke clien seperti berikut
Seperti pada data sequence diatas ketika pada awal clien mengirimkan SYN dengan seq=0 dan kemudian sarver mengirim SYN/ACK pada sarver dengan seq=0 ack=1 dan selanjutnya clien membalas dengan ACK seq=1 ack=1 dengan diiringi PSH/ACK seq=1 ack=1, yang selanjutnya sarver akan mengirimkan pada clien seq=1 yang sebelumnya diminta oleh clien dengan sarver juga meminta ack=23 pada clien yang selanjutnya clien akan mengirimkan seq=23 dan meminta pada server act=36 dan begitu pula seterusnya hingga hubungan antara clien dan sarver ditutup atau berahir. Dan jika pada saat pengiriman sequence dari clien terdapat sebuah kesalahan yang menyebabkan pesan tidak terkirim maka server akan meminta kembali sequence yang belum dikirimkan tersebut hingga sequence tersebut diterima oleh server.
2.      Multy Thread
Pada wireshark yang telah dijalankan pada server akan muncul sequence yang dikirimkandari clien ke server dan dari server ke clien secara multy thread seperti berikut

Pada dasarnya untuk pengiriman sequence pada multy thread ini sama dengan single thread, akan tetapi perbedaannya yaitu pada saat terdapar clien baru yang akan berhubungan dengan server maka sarver akan menyediakan sequence baru untuk clien baru tersebut dan untuk clien yang pertama akan tetap sama melanjutkan sequence yang telah terkirim pada clien. Yang perlu diingat clien tak akan memutuskan hubungan terlebih dahulu dengan clien, akan tetapi clien yang akan menutup hubungan dengan server. Dan pada saat clien menutup hubungan dengan server ada kalanya sequence tertentu akan tidak ditampilkan yang dikarenakan pada saat penutupan oleh clien ini clien menggunakan sebuah kata kunci yang akan memakan sequence yang akan dikirim pada server.

Tidak ada komentar:

Posting Komentar