Laporan Resmi Socket - akbar it

advertisement
LAPORAN RESMI
ADMINISTRASI DAN MANAGEMEN JARINGAN
SOCKET PROGRAMMING
Oleh :
Akbar Nadzif
2103141043
Dosen Pengampu :
Ferry Astika Saputra
PROGRAM STUDI D3 TEKNIK INFORMATIKA
DEPARTEMEN TEKNIK INFOR MATIKA DAN TEKNIK KOMPUTER
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
2016
LAPORAN RESMI
ADMINISTRASI DAN MANAGEMEN JARINGAN
SOCKET PROGRAMMING
A. TUJUAN PEMBELAJARAN
1. Mengetahui proses komunikasi antara client dan server.
B. DASAR TEORI
Socket adalah sebuah cara untuk berkomunikasi dengan program atau node lain
menggunakan file deskriptor. Di UNIX (dimana socket diciptakan) kita sering mendengar
slogan: “everything is a file”, jadi untuk berkomunikasi dengan program atau node lain
semudah kita membaca dan menulis file deskriptor. Antarmuka socketdan file adalah
mirip, jika pada file kita membukanya dengan open() sedangkan pada socket kita
manggunakan socket(). Pada file deskriptor yang menjadi tujuan adalah sebuah file,
sedangkan pada socket adalah komputer atau node lain. Intinya ketika kita telah
terhubung dengan socket(), maka antarmukanya sama saja dengan sebuah file. Sebuah
abstraksi perangkat lunak yang digunakan sebagai suatu “terminal” dari suatu hubungan
antara dua mesin atau proses yang saling berinterkoneksi
Penggunaan socket programming memungkinkan adanya komunikasi antara
client dan server. Salah satu contoh sederhana penggunaan socket programming adalah
pembuatan program untuk chatting. Program tersebut sebenarnya merupakan bentuk
aplikasi berupa komunikasi antara client dan server. Ketika seorang user (client)
melakukan koneksi ke chat server, program akan membuka koneksi ke port yang
diberikan, sehingga server perlu membuka socket pada port tersebut dan “mendengarkan”
koneksi yang datang. Socket sendiri merupakan gabungan antara host-adress dan port
adress. Dalam hal ini socket digunakan untuk komunikasi antara client dan server.
Socket merupakan fasilitas IPC (Inter Proses Communication) untuk aplikasi
jaringan. Agar suatu socket dapat berkomunikasi dengan socket lainnya, maka socket
butuh diberi suatu alamat unik sebagai identifikasi. Alamat socket terdiri atas Alamat IP
dan Nomer Port. Contoh alamat socket adalah 192.168.29.30: 3000, dimana nomer 3000
adalah nomer portnya. Alamat IP dapat menggunakan alamat Jaringan Lokal (LAN)
maupun alamat internet. Jadi socket dapat digunakan untuk IPC pada LAN maupun
Internet.
C. LAPORAN RESMI
Menganalisa proses komunikasi client server menggunakan socket programming Single
Thread dan Multi Thread.
Langkah melakaukan komunikasi client server Socket Programming
a. Siapkan file socket programming, meliputi script java yakni client dan server
Chat Client
import
import
import
import
import
import
import
java.io.BufferedReader;
java.io.IOException;
java.io.InputStreamReader;
java.io.PrintWriter;
java.net.InetAddress;
java.net.Socket;
java.net.UnknownHostException;
public class ChatClient {
private static String strHost;
private static InetAddress host;
private static final int PORT = 3954;
PORT untuk
menghubungkan
client dan server
public static void main(String[] args) {
try {
IP target/IP server
strHost = "192.168.173.1";
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);
}
}
}
}
Chat Server
import
import
import
import
import
import
java.io.BufferedReader;
java.io.IOException;
java.io.InputStreamReader;
java.io.PrintWriter;
java.net.ServerSocket;
java.net.Socket;
public class ChatServer {
private static ServerSocket servSock;
private static final int PORT = 3954;
PORT untuk
menghubungkan
client dan server
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");
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 memutuskan
koneksi");
System.exit(1);
}
}
}
}
Chat Server Thread
import java.io.IOException;
import java.net.ServerSocket;
public class ChatServerThread {
private static ServerSocket servSock;
private static final int PORT = 3954;
public ChatServerThread(){
}
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 memutuskan koneksi");
e.printStackTrace();
System.exit(1);
}
}
}
public static void main(String[] args) {
ChatServerThread es = new ChatServerThread();
System.out.println("Server telah berjalan di komputer ini pada
port "+PORT);
es.Start();
}
}
b. Run kedua script masing berperan menjadi client dan satunya menjadi server dan beri
analisa keduanya.
Single Thread
Single Thread Server
Flow Graph Single Thread
Analisa
Dari table flowgraph diatas flag SYN adalah untuk mengindikasi bahwa TCP telah
mengandung sequence number. SYN akan bernilai 1 ketika melakukan request. Kemudian
jika transfer paket data menerima kiriman, maka akan di balas dengan ACK atau (SYN, ACK).
Untuk sekali koneksi terbentuk, ACK flag diset disemua segmen. Sehingga ACK flag
nilainya menjadi x+1 artinya host telah menerima semua byte temasuk x dan menambahkan
penerimaan berikutnya X+1. Selanjutnya client akan merespon dengan ACK number y+1
yang berarti ia telah menerima ACK sebelumnya.
Multi Thread Client 1
Multi Thread Client 2
Multi Thread Server
Flow Graph Multi Thread
Analisa
Download