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