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