Praktikum Minggu ke-14. Socket Programming

dokumen-dokumen yang mirip
A. TUJUAN PEMBELAJARAN

PEMROGRAMAN SOCKET LANJUTAN

A. TUJUAN : Dapat mengimplementasi-kan kelas-kelas Java yang digunakan dalam pemrogaman jaringan.

Pemrograman Jaringan

Mobile Computing Tugas Individu 1

NETWORK PROGRAMMING. Yuliana Setiowati Politeknik Elektronika Negeri Surabaya D4 PENS-ITS

MENGGUNAKAN TCP SOCKET. Oleh: M. Ghazali a.k.a. ghanoz 2480

Network Programming 2010 Pertemuan-4. Pemrograman Socket. Husni. Husni.trunojoyo.ac.id Komputasi.wordpress.

Pemrograman Socket TCP dan Socket UDP

Pemrograman Socket menggunakan TCP

LAMPIRAN. Berikut ini adalah kode program transmisi video yang diinstall pada sisi user. public static void main(string args[]) throws Exception

10.1 Konsep dasar jaringan

Protokol. Pemrograman Client/Server dengan Java Socket. Protokol TCP/IP. Tipe pemrograman jaringan. Java Socket

Pemrograman Jaringan 6.

PEMROGRAMAN JARINGAN

Connection Oriented. Kholid F.

Pemrograman Jaringan 9. Connectionless Oriented Programming

Pemrograman Berorientasi Obyek Lanjut (IT251) Ramos Somya, S.Kom., M.Cs.

Socket pada UDP. Husni Husni.trunojoyo.ac.id Komputasi.wordpress.com

Pemrograman Socket menggunakan UDP

Membuat Aplikasi Chatting Dengan Java

Sistem Terdistribusi

Pemrograman Jaringan

TPI4202 e-tp.ub.ac.id. Lecture 4 Mas ud Effendi

Riwayat Pendidikan: SDK Lemuel II, Pos Pengumben, Jakarta Barat SMPK Lemuel, Pos Pengumben, Jakarta Barat SMUN 78, Kemanggisan, Jakarta Barat

Sistem Terdistribusi

BAB 5 Mendapatkan Input dari Keyboard

LAPORAN RESMI ADMINISTRASI & MANAGEMENT JARINGAN. PRAKTIKUM 3 Pemrograman Socket dengan TCP

BAB 5 Mendapatkan Input dari Keyboard

Modul Praktikum Pemrograman

Network Programming 2010 Jaringan & Aplikasinya. Husni Husni.trunojoyo.ac.id

Network Programming oleh : Yuliana Setiowati

BAB II LANDASAN TEORI

Pemrograman Jaringan 5.

Nama Lengkap : Muiz Lidinillah NIM :

PEMROGRAMAN JAVA. Yoannita, S.Kom. Input Kondisi (IF-ELSE, SWITCH)

Membuat Aplikasi Berbasis Web Di Device Android Mobile

PENGANTAR APLIKASI TERDISTRIBUSI (Minggu I Praktikum I)

APLIKASI CHAT ANTAR PC

PRAKTIKUM 7 DASAR INPUT OUTPUT

INTRODUCTION TO ANDROID MOBILE APP DEVELOPMENT MUHAMMAD BAGIR., MTI

Network Programming. Oleh: Idris Winarno (thanks to my sist)

2.1. Sistem Komunikasi

BAB 2 INPUT DARI KEYBOARD

TCP (Transfer Control Protocol) SOCKET PROGRAMMING

Pemrograman Client/Server dengan Java Socket

M.Octaviano Pratama

Mendapatkan Input Dari Keyboard

Variabel tersebut seharusnya bisa dideklarasikan didalam try block dan block catch

Mobile Computing. Ramos Somya

Waktu Sisa : 0:43:4. Sukses. Kesalahan pada URL. File tidak lengkap. Kesalahan umum. Mengerjakan finally. Diluar block

Pemrograman Berorientasi Obyek (IT251) Ramos Somya, S.Kom., M.Cs.

Sistem Terdistribusi 4

PERTEMUAN III OBJEK DAN CLASS TUJUAN PRAKTIKUM

MODUL 2 WIRESHARK Protokol TCP

EXCEPTION. 2. Pada kondisi bagaimana klausa finally tidak akan dieksekusi? Kode didalam block try memiliki statement return

MK. Pemrograman Berorientasi Objek. Input dari Keyboard. Karmilasari

TASK V OBSERVING TCP/IP, PORT USING COMMAND PROMPT AND WIRESHARK

1. Apa yang harus dilakukan oleh programmer untuk menangani user-defined exception? Menuliskan exception sebagai start method

Modul 3 Flow Control dan Input

I/O (Input dan Output)

LAMPIRAN 1 Tutorial Implementasi Editor Pengukuran, Pengiriman dan Penerimaan

A. TUJUAN PEMBELAJARAN 1. Mengetahui cara menangani exception dengan cara melempar exception. 2. Mengetahui cara membuat sendiri class exception.

Tidak ada satupun dari pilihan di atas yang benar karena checked exception tidak bisa ditulis

JURUSAN SISTEM KOMPUTER FAKULTAS ILMU KOMPUTER UNIVERSITAS SRIWIJAYA

Sukses. Kesalahan pada URL. File tidak lengkap. Kesalahan umum

MODUL 2 WIRESHARK Protokol TCP

Input Nilai tanpa Case String di Java

Bahasa Pemrograman :: Dasar Pemrograman Java

J2ME GUI dan Interkoneksi Client Server

KOMUNIKASI PENGANTAR DATA TERDISTRIBUSI. Materi: 1. Komunikasi Data 2. Protocol 3. Remote Procedure Call 4. Object Remote

Muhammad Zen Samsono Hadi, ST. Msc.

BAB II TINJAUAN PUSTAKA DAN DASAR TEORI. mengangkat kasus dan penggunaan teknologi yang berbeda-beda, pada table 2.1

Pertemuan 2 Struktur Kontrol Percabangan

TASK 5 JARINGAN KOMPUTER

PRAKTIKUM 17 MENANGANI EXCEPTION

Topik. Stream I/O Cara menggunakan Stream Hierarchy Java I/O Membaca File Menulis File Menghapus File Cara membaca isi Direktori dalam file

PROGRAM STUDI D3 JURUSAN TEKNIK KOMPUTER POLITEKNIK NEGERI SRIWIJAYA PALEMBANG Pemrograman Berorientasi Objek 3 (Mobile And Web Programming)

STREAM DAN FILE. PipedInputStream, SequenceInputStream, dan StringBufferInputStream.

pembuat game seperti yang kita rasakan saat ini dimana banyak game online

Agenda. Protokol TCP/IP dan OSI Keluarga Protokol TCP/IP

IMPLEMENTASI APLIKASI CHEPPYCHAT UNTUK JARINGAN KOMPUTER PADA LOCAL AREA NETWORK

JARINGAN KOMPUTER. Disusun Oleh : Nama : Febrina Setianingsih NIM : Dosen Pembimbing : Dr. Deris Stiawan, M.T., Ph.D.

Minggu 6 Transport Layer

Cara Membaca File Text di JAVA

IMPLEMENTASI TCP/IP UNTUK MEMBUAT SERVER DATABASE ACCESS ABSTRAK

Pemrograman Jaringan 11 RMI

Pemanggilan RESTful Web Service PHP dari Client Java

IKG2I4 / Software Project I

PEMROGRAMAN JARINGAN MODUL 3 STREAM

TUGAS TASK 5 JARINGAN KOMPUTER

Protokol Jaringan. Oleh : Tengku Mohd Diansyah,ST,M.Kom

JURUSAN SISTEM KOMPUTER FAKULTAS ILMU KOMPUTER UNIVERSITAS SRIWIJAYA

Modul 9 Protokol Transport (TCP/UDP)

HTTP Protocol Ketika sebuah alamat web (atau URL) yang diketik ke dalam web browser, web browser melakukan koneksi ke web service yang berjalan pada

BAB II TINJAUAN PUSTAKA DAN DASAR TEORI. pernah dilakukan oleh beberapa penulis. tentang membangun aplikasi chat berbasis android.

MODUL 11 J2ME (Java 2 Micro Edition)

CAPTURE DAN ANALISIS PAKET PROTOKOL MENGGUNAKAN WIRESHARK

2. Pilih instruksi yang dapat digunakan dalam method actionperformed untuk membedakan antara tombol buttonone dan buttontwo.

Transkripsi:

Praktikum Minggu ke-14 Socket Programming A. TUJUAN PEMBELAJARAN 1. Siswa memahami konsep aplikasi client server di jaringan. 2. Mahasiswa memahami konsep pemprograman socket dasar. 3. Mahasiswa mampu membangun program socket sederhana dg single thread B. DASAR TEORI Model yang umum diterapkan dalam jaringan komputer adalah model client/server. Konsepnya sederhana, sebuah aplikasi client melakukan permintaan untuk suatu layanan (service) informasi atau mengirim sebuah perintah ke suatu aplikasi server. Aplikasi server akan menerima permintaan dari client, kemudian memproses berdasarkan permintaan tersebut. Dari hasil pemrosesan yang sudah dilakukan, aplikasi server akan mengembalikan hasil pemrosesan tersebut ke aplikasi client. Sehingga pada prinsipnya aplikasi server dalam status menunggu (listen) permintaan dari aplikasi client, sedangkan client mencoba membuat koneksi (connect) ke server. Aplikasi client melakukan koneksi ke server melalui sebuah alamat socket. Alamat socket adalah kombinasi dari alamat IP dan nomor port. Contoh alamat socket adalah 192.168.1.30:80, dimana nomer 80 adalah nomer portnya. Jika alamat IP diibaratkan sebuah nomer telepon, maka nomer port adalah nomer ekstensinya. Suatu proses yang hendak berkomunikasi dengan proses lain lewat mekanisme socket haruslah mengikatkan dirinya dengan salah satu port. Tahap proses ini disebut dengan binding.

Memulai aplikasi Membuat server socket Membuat socket Permintaan membuka koneksi Menerima koneksi Membaca dan menulis stream Bertukar data Membaca dan menulis stream Menutup socket Permintaan menutup koneksi Menutup socket Keluar aplikasi tidak Lanjut ya Gambar 10.1 menunjukkan bagan interkoneksi server dan client. Model pemrograman client-server menggunakan dari dua macam koneksi pada layer 4/ layer transport OSI, yaitu connection oriented dan connectionless oriented. Untuk connection oriented menggunakan protokol TCP (Transmission Control Protocol). Sedangkan connectionless oriented menggunakan UDP (User Datagram Protocol ). Pada praktikum ini, kita akan mencoba membangun sebuah aplikasi cliet-server sederhana dengan menggunakan bahasa pemrograman Java. Pada J2SE telah disediakan paket java.net yang berisi kelaskelasdan interface yang menyediakan API (Application Programming Interface) level rendah (Socket, ServerSocket,DatagramSocket) dan level tinggi (URL, URLConnection). Berikut adalah contoh dari kelas Socket berikut method dan eksepsi error yang tersedia (Untuk lebih jelasnya anda bias membacanya di Java documentation) : Socket(String host, int port, InetAddress localaddr, intlocalport);

membuat sebuah socket dan mengkoneksikannya ke port yang dituju pada alamat IP yang disebutkan pada parameter address atau nama host. Selain itu juga akan dilakukan bind socket ke alamat lokal dan port lokal. (Hal ini dilakukan jika koneksi antara client dan server membutuhkan nomor port yang sudah ditentukan. Methods : getinetaddress() : untuk mendapatkan nama host yang dituju dan alamat IPnya getport() : untuk mendapatkan nomor remote host getlocalport(): untuk mendapatkan nomor port localhost getlocaladdress(): untuk mendapatkan alamat local dimana socket digunakan getinputstream(): mengembalikan objek input stream dari socket getoutputstream(): mengembalikan objek output stream ke socket setsotimeout(int timeout) dan getsotimeout() : Kedua method tersebut digunakan untuk memberi (set) dan mengambil (get) nilai opsi Socket untuk time out block (dalam milidetik) reading dari socket (SO_TIMEOUT). Jika dalam waktu timeout tidak mendapat suatu nilai maka, akan dilemparkan ke exception java.net.sockettimeoutexception. Nilai default timeoutnya adalah 0, yang berarti tanpa batas. Exceptions : SocketException : Kelas ini merupakan kelas yang diturunkan dari kelas IOException. Kelas exception ini dipanggil atau dipicu ketika ada kegagalan dalam pemakaian socket, sebagai contoh adalah kegagalan dalam protokol TCP. Salah satu penyebabnya yang mungkin terjadi adalah ketika port yang akan digunakan sudah digunakan sebelumnya pada localhost. Penyebab yang lain adalah user tidak dapat melakukan bind ke port yang dituju. Misalnya saja, Anda ingin menggunakan port 80 untuk aplikasi Anda, namun ternyata pada komputer Anda tersebut sudah berjalan HTTP Server yang juga menggunakan port 80. Bila hal ini terjadi,

maka JVM akan melemparkan kegagalan yang ada ke kelas exception SocketException. BindException : Exception ini akan dipanggil ketika ada port lokal yang akan digunakan sudah terpakai oleh yang lain, atau ada kegagalan dalam permintaan untuk menggunakan alamat. ConnectException : Exception ini akan dipanggil ketika sebuah koneksi ditolak oleh host yang dituju, oleh karena tidak ada proses yang siap menerima data pada port yang dituju. NoRouteToHostException: Koneksi yang akan dibangun tidak dapat dipenuhi oleh karena melebihi waktu timeout yang tersedia atau host yang dituju tidak dapat dicapai (unreachable). C. LISTING PROGRAM 1a. Program Socket Server sederhana Source : http://www.tutorialspoint.com/java/java_networking.htm // File Name GreetingServer.java import java.net.*; import java.io.*; public class GreetingServer extends Thread private ServerSocket serversocket; public GreetingServer(int port) throws IOException serversocket = new ServerSocket(port); serversocket.setsotimeout(10000);

public void run() while(true) try System.out.println("Waiting for client on port " + serversocket.getlocalport() + "..."); Socket server = serversocket.accept(); System.out.println("Just connected to " + server.getremotesocketaddress()); DataInputStream in = new DataInputStream(server.getInputStream()); System.out.println(in.readUTF()); DataOutputStream out = new DataOutputStream(server.getOutputStream()); out.writeutf("thank you for connecting to " + server.getlocalsocketaddress() + "\ngoodbye!"); server.close(); catch(sockettimeoutexception s) System.out.println("Socket timed out!"); break; catch(ioexception e) e.printstacktrace(); break; public static void main(string [] args)

int port = Integer.parseInt(args[0]); try Thread t = new GreetingServer(port); t.start(); catch(ioexception e) e.printstacktrace(); 1b. Program Socket Client sederhana // File Name GreetingClient.java import java.net.*; import java.io.*; public class GreetingClient public static void main(string [] args) String servername = args[0]; int port = Integer.parseInt(args[1]); try System.out.println("Connecting to " + servername + " on port " + port); Socket client = new Socket(serverName, port); System.out.println("Just connected to " + client.getremotesocketaddress()); OutputStream outtoserver = client.getoutputstream();

DataOutputStream out = new DataOutputStream(outToServer); out.writeutf("hello from " + client.getlocalsocketaddress()); InputStream infromserver = client.getinputstream(); DataInputStream in = new DataInputStream(inFromServer); System.out.println("Server says " + in.readutf()); client.close(); catch(ioexception e) e.printstacktrace(); Pertama-tama, compile kedua program (client dan server) kemudian jalankan program server lebih dahulu dengan perintah sbb. : $ java GreetingServer 6066 Waiting for client on port 6066... Kemudian jalankan program client dengan perintah berikut ini : $ java GreetingClient localhost 6066 Connecting to localhost on port 6066 Just connected to localhost/127.0.0.1:6066 Server says Thank you for connecting to /127.0.0.1:6066 Goodbye! 2. Program Aplikasi HTTP Server sederhana 1. ///A Simple Web Server (WebServer.java) 2. 3. import java.io.bufferedreader; 4. import java.io.inputstreamreader;

5. import java.io.printwriter; 6. import java.net.serversocket; 7. import java.net.socket; 8. 9. public class webserver 10. /** 11. * WebServer constructor. 12. */ 13. protected void start() 14. ServerSocket s; 15. int port = 8888; 16. System.out.println("Webserver starting up on port " +port); 17. System.out.println("(press ctrl-c to exit)"); 18. try 19. // tahap bind(),membuat socket 20. s = new ServerSocket(port); 21. catch (Exception e) 22. System.out.println("Error: " + e); 23. return; 24. 25. 26. System.out.println("Waiting for connection"); 27. for (;;) 28. try 29. // tahap listen(), menunggu koneksi 30. Socket remote = s.accept(); 31. // tahap accept() 32. System.out.println("Connection, sending data."); 33. BufferedReader in = new BufferedReader(new InputStreamReader( 34. remote.getinputstream())); 35. PrintWriter out = new PrintWriter(remote.getOutputStream()); 36. // membaca request 37. String str = "."; 38. while (!str.equals("")) 39. str = in.readline(); 40. // Mengirim response dan mengirim HTTP headers 41. out.println("http/1.0 200 OK"); 42. out.println("content-type: text/html"); 43. out.println("server: Bot"); 44. // Batas pengiriman header ditandai dengan baris kosong 45. out.println(""); 46. // Mengirim halam HTML 47. out.println("<h1>selamat datang di web server percobaan</h1>"); 48. out.println("<blink>selamat datang di web server percobaan</blink>"); 49. out.flush(); 50. remote.close(); 51. catch (Exception e)

52. System.out.println("Error: " + e); 53. 54. 55. 56. 57. /** 58. * Menjalankan server 59. * 60. * @param args 61. * Command line parameters are not used. 62. */ 63. public static void main(string args[]) 64. webserver ws = new webserver(); 65. ws.start(); 66. 67. END 3a. Program Aplikasi Chat Server dengan menggunakan TCP 1. import java.io.bufferedreader; 2. import java.io.ioexception; 3. import java.io.inputstreamreader; 4. import java.io.printwriter; 5. import java.net.serversocket; 6. import java.net.socket; 7. 8. public class TCPEchoServer 9. 10. private static ServerSocket servsock; 11. private static final int PORT = 1234; 12. 13. public static void main(string args[]) 14. System.out.println("Membuka socket...\n"); 15. try 16. servsock = new ServerSocket(PORT); 17. catch (IOException e) 18. System.out.println("Gagal membuka port!!!"); 19. System.exit(1); 20. 21. do 22. run(); 23. while (true);

24. 25. 26. private static void run() 27. Socket link = null; 28. try 29. 30. link = servsock.accept(); 31. BufferedReader in = new BufferedReader(new InputStreamReader(link.getInputStream())); 32. PrintWriter out = new PrintWriter(link.getOutputStream(), true); 33. int nummessages = 0; 34. String message = in.readline(); 35. while (!message.equals("close")) 36. 37. System.out.println("Pesan diterima : [" +message.tostring() + "] dalam " + message.length() + " bytes"); 38. //System.out.println("Message received"); 39. nummessages++; 40. out.println("isi Pesan " + nummessages + ":" + message); 41. message = in.readline(); 42. 43. 44. out.println(nummessages + " buah pesan telah diterima."); 45. catch (IOException e) 46. finally 47. try 48. System.out.println("*********Menutup koneksi ****"); 49. link.close(); 50. catch (IOException e) 51. System.out.println("Tidak dapat memustukan koneksi"); 52. System.exit(1); 53. 54. 55. 56. 3b. Program Aplikasi Chat Client dengan menggunakan TCP 1. import java.io.bufferedreader; 2. import java.io.ioexception; 3. import java.io.inputstreamreader; 4. import java.io.printwriter; 5. import java.net.inetaddress; 6. import java.net.socket; 7. import java.net.unknownhostexception; 8.

9. public class TCPEchoClient 10. 11. private static String strhost; 12. private static InetAddress host; 13. private static final int PORT = 1234; 14. 15. public static void main(string args[]) 16. try 17. // host = InetAddress.getLocalHost(); 18. strhost = "10.252.44.177" ; // <- Masukan sesuai dengan tujuan 19. host = InetAddress.getByName(strHost); 20. catch (UnknownHostException e) 21. System.out.println("Alamat tidak ditemukan"); 22. System.exit(1); 23. 24. run(); 25. 26. 27. private static void run() 28. Socket link = null; 29. try 30. link = new Socket(host, PORT); 31. BufferedReader in = new BufferedReader(new InputStreamReader(link.getInputStream())); 32. PrintWriter out = new PrintWriter(link.getOutputStream(), true); 33. 34. BufferedReader userentry = new BufferedReader(new InputStreamReader(System.in)); 35. String message, response; 36. do 37. System.out.print("Masukkan pesan : "); 38. message = userentry.readline(); 39. out.println(message); 40. response = in.readline(); 41. System.out.println("SERVER " + response); 42. while (!message.equals("close")); 43. catch (IOException e) 44. e.printstacktrace(); 45. finally 46. try 47. System.out.println("Menutup Koneksi."); 48. link.close(); 49. catch (IOException e) 50. System.out.println("Tidak dapat memutuskan koneksi!"); 51. System.exit(1); 52. 53.

54. 55. D. PERCOBAAN 1. Tulis kembali program C1 dalam editor yang anda sukai. 2. Jalankan program netstat -ap TCP. Catat alamat IP sumber, alamat IP tujuan dan nomor port yang sedang dalam keadaan menunggu ( listen() ). 3. Jalankan program C1! Amati perubahan yang sedang terjadi pada komputer anda dengan menggunakan perintah pada nomor 2. 4. Jalankan web browser dan arahkan URL ke alamat IP computer anda ditambah dengan nomor port dari web server percobaan! 5. Amati perubahan yang sedang terjadi pada komputer anda dengan menggunakan perintah pada nomor 2. 6. Buat flowchart untuk menggambarkan interaksi program C1 dan browser anda! 7. Tulis kembali program C2,C3 dalam editor yang anda sukai. 8. Jalankan program Aplikasi Server C2! Amati perubahan yang sedang terjadi pada komputer anda dengan menggunakan perintah pada nomor 2. 9. Jalankan program C3! Amati perubahan yang sedang terjadi pada komputer anda dengan menggunakan perintah pada nomor 2. 10. Kirim 3 pesan yang berbeda. Pesan terakhir adalah close. Catat hasil pada aplikasi server dan aplikasi client. 11. Jalankan perintah pada no 11! Amati perubahan port dari aplikasi client yang sedang terjadi pada komputer anda dengan menggunakan perintah pada nomor 2. Mengapa terjadi perubahan pada port aplikasi client? 12. Buat flowchart untuk menggambarkan interaksi program C2 dan program C3!

4a. Program UDP server sederhana Source : https://systembash.com/a-simple-java-udp-server-and-udp-client/ import java.io.*; import java.net.*; class UDPServer public static void main(string args[]) throws Exception DatagramSocket serversocket = new DatagramSocket(9876); byte[] receivedata = new byte[1024]; byte[] senddata = new byte[1024]; while(true) DatagramPacket receivepacket = new DatagramPacket(receiveDa ta, receivedata.length); serversocket.receive(receivepacket); String sentence = new String( receivepacket.getdata()); System.out.println("RECEIVED: " + sentence); InetAddress IPAddress = receivepacket.getaddress(); int port = receivepacket.getport(); String capitalizedsentence = sentence.touppercase(); senddata = capitalizedsentence.getbytes(); DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, IPAddress, port); serversocket.send(sendpacket); 4b. Program UDP client sederhana Source : https://systembash.com/a-simple-java-udp-server-and-udp-client/ import java.io.*; import java.net.*; class UDPClient

public static void main(string args[]) throws Exception BufferedReader infromuser = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket clientsocket = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName("localhost"); byte[] senddata = new byte[1024]; byte[] receivedata = new byte[1024]; String sentence = infromuser.readline(); senddata = sentence.getbytes(); DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, IPAddress, 9876); clientsocket.send(sendpacket); DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length); clientsocket.receive(receivepacket); String modifiedsentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedsentence); clientsocket.close();

Socket Programming Tingkat Lanjut (kerjakan di rumah) A. DASAR TEORI Pada praktikum sebelumnya anda telah membuat program aplikasi client-server. Kelemahan dari program sebelumya adalah tiap server hanya bisa melayani satu koneksi. Padahal dalam aplikasi sebenarnya setiap aplikasi server mempunyai kemampuan menerima koneksi lebih dari satu. Pemrograman Java menawarkan dua buah solusi, yaitu dengan menggunakn thread dan menggunakan RMI (Remote Method Invocation). Pada praktikum ini, kita akan berfokus pada solusi dengan menggunakan multithread. Seperti yang sudah anda pelajari pada mata kuliah sistem operasi, pada proses single thread proses akan menjalakan bagian program secara terurut, dan memakai resources secara bergantian. Berbeda dengan multi thread, dimana thread saling berbagi bagian program dan resources dengan thread lain yang mengacu pada proses yang sama. Pada praktikum ini kita akan mempelajari strategi penggunaan multithread pada pemrograman client-server. Pada sisi aplikasi server terdapat penambahan 1 buah class bernama clienthandler yang digunakan untuk melayani koneksi ke client. Main class dari aplikasi server memanggil thread yang berisi class tersebut apabila ada aplikasi client yang meminta koneksi. B. LISTING PROGRAM 3. Program Utama(Main Program) Aplikasi Server dengan Multithread 1. import java.io.ioexception; 2. import java.net.serversocket; 3. 4. public class TCPEchoServerThread 5.

6. private static ServerSocket servsock; 7. private static final int PORT = 12345; 8. 9. public TCPEchoServerThread() 10. 11. 12. public void start() 13. try 14. servsock = new ServerSocket(PORT); 15. 16. while (true) 17. Thread clientthread = new Thread(new clienthandler(servsock.accept())); 18. clientthread.start(); 19. 20. catch (IOException e) 21. e.printstacktrace(); 22. finally 23. try 24. System.out.println("Menutup koneksi..."); 25. servsock.close(); 26. catch (IOException e) 27. System.out.println("Tidak dapat memustukan koneksi"); 28. e.printstacktrace(); 29. System.exit(1); 30. 31. 32. 33. 34. public static void main(string[] args) 35. TCPEchoServerThread es = new TCPEchoServerThread(); 36. System.out.println("Server telah berjalan di komputer ini pada port " +PORT); 37. es.start(); 38. 39. 4. Program Aplikasi Server Untuk Melayani Koneksi Client 1. import java.io.bufferedreader; 2. import java.io.ioexception; 3. import java.io.inputstreamreader; 4. import java.io.printwriter; 5. import java.net.*; 6. 7. class clienthandler implements Runnable 8. 9. private static int numconnections;

10. private int connectionid = 0; 11. Socket link; 12. 13. public clienthandler(socket s) 14. connectionid = numconnections++; 15. System.out.println("Melayani koneksi ke-"+ connectionid); 16. link = s; 17. 18. 19. public void run() 20. PrintWriter out = null; 21. BufferedReader in = null; 22. int nummessages = 0; 23. 24. try 25. out = new PrintWriter(link.getOutputStream(), true); 26. in = new BufferedReader(new InputStreamReader(link.getInputStream())); 27. String message=in.readline(); 28. while (!message.equals("close") ) 29. System.out.println("Pesan diterima : [" +message.tostring() + "] dari client " + connectionid +" dalam " + message.length() + " bytes"); 30. nummessages++; 31. out.println("isi Pesan " + nummessages + ":" + message); 32. message = in.readline(); 33. 34. catch (Exception e) 35. e.printstacktrace(); 36. finally 37. out.close(); 38. try 39. in.close(); 40. link.close(); 41. System.out.println("Menutup koneksi, #" + connectionid); 42. catch (IOException e) 43. e.printstacktrace(); 44. 45. 46. 47. D. PERCOBAAN 1. Tulis kembali program C1,C2 dalam editor yang anda sukai. 2. Jalankan program Aplikasi Server C1!

3. Jalankan program netstat -ap TCP. Catat alamat IP sumber, alamat IP tujuan dan nomor port yang sedang dalam keadaan menunggu ( listen() ). 4. Jalankan program client! Amati perubahan yang sedang terjadi pada komputer anda dengan menggunakan perintah pada nomor 3. 5. Jalankan program sebanyak 2 client lagi! Kirim 3 pesan yang berbeda. Pesan terakhir adalah close. Catat hasil pada aplikasi server dan aplikasi client. 6. Buat flowchart untuk menggambarkan interaksi program C1,C2 dan aplikasi client!