MENGGUNAKAN TCP SOCKET Oleh: M. Ghazali a.k.a. ghaNOZ 2480 http://ghanoz2480.wordpress.com
Agenda Pendahuluan Sekilas Mengenai TCP Socket Membuat Program Server Contoh Program Server Membuat Program Client Contoh Program Client Demo Catatan Referensi 09/03/2009
2
Pendahuluan
Pendahuluan
Apa yang telah saya pelajari? ¾ Sedikit mengenai TCP Socket ¾ Langkah dalam menset proses server ¾ Langkah dalam menset proses client ¾ Membuat program client/server
09/03/2009
4
Sekilas Mengenai TCP Socket
Sekilas Mengenai TCP Socket
Hubungan komunikasi yang dibuat melalui TCP socket merupakan hubungan connection-oriented. Hubungan antara server dan client tetap terbuka selama dialog Dalam keadaan normal hanya dapat diputus ketika salah satu end-point (client atau server) menghentikan exchange melalui protokol yang disetujui
09/03/2009
6
Membuat Program Server
Membuat Program Server
Langkah yang dibutuhkan dalam menset proses server: 1. 2. 3. 4. 5.
09/03/2009
Membuat object ServerSocket Menempatkan server dalam keadaan menunggu Menset input dan output stream Mengirim dan menerima data Mengakhiri hubungan (setelah penyelesaian dialog)
8
Membuat Program Server (Langkah ke-1)
Membuat object ServerSocket: ¾
¾
Constructor ServerSocket membutuhkan nomor port antara 1024-65535 (non-reserved) sebagai argumen. Sebagai contoh:
ServerSocket servSock = new ServerSocket(2480); ¾ Dengan begitu, server akan mendengarkan koneksi dari client pada port 2480. 09/03/2009
9
Membuat Program Server (Langkah ke-2)
Menempatkan server dalam keadaan menunggu: ¾
¾
¾
09/03/2009
Server menunggu untuk jangka waktu tidak terbatas (‘blocks’) untuk menghubungkan client. Dilakukan dengan memanggil method accept dari class ServerSocket dimana akan me-return object Socket ketika hubungan dibuat. Contoh: Socket link = servSock.accept();
10
Membuat Program Server (Langkah ke-3)
Menggunakan method getInputStream dan getOutputStream dari class Socket Method tersebut digunakan untuk mengambil reference ke stream yang berhubungan dengan socket yang di-returned pada langkah ke-2
09/03/2009
11
Membuat Program Server (Langkah ke-3)
Menset input stream : ¾
¾
09/03/2009
Untuk aplikasi non-GUI, kita dapat membungkus object InputStream (yang di-returned oleh method getInputStream) dalam object Scanner, untuk memperoleh masukan string-oriented. Sebagai contoh: Scanner input = new Scanner(link.getInputStream());
12
Membuat Program Server (Langkah ke-3)
Menset output stream : ¾
¾
¾
09/03/2009
Membungkus (wrap) object OutputStream (yang direturned oleh method getOutputStream) dalam object PrintWriter Sebagai contoh: PrintWriter output = new PrintWriter(link.getOutputStream(), true); Dengan argumen kedua (true) akan menyebabkan output buffer untuk di-flush setiap kali println dipanggil 13
Membuat Program Server (Langkah ke-4)
Mengirim dan menerima data: ¾
¾
¾
09/03/2009
Menerima data dengan menggunakan method nextLine (class Scanner) Mengirim data dengan menggunakan method println (class PrintWriter) Sebagai contoh: String message = input.nextLine(); output.println(“echo back..."); 14
Membuat Program Server (Langkah ke-5)
Mengakhiri hubungan (setelah penyelesaian dialog) : ¾ ¾
09/03/2009
Menggunakan method close (class Socket) Sebagai contoh: link.close();
15
Contoh Program Server
Contoh Program Server import import import
java.io.*; java.net.*; java.util.*;
public class TCPEchoServer1{ private static ServerSocket servSocket; private static final int PORT = 2480; public static void main(String args[]){ System.out.println("Opening port..."); System.out.println("Awaiting for data..."); try{ // STEP1: Create ServerSocket object servSocket = new ServerSocket(PORT); } 09/03/2009
17
Contoh Program Server catch(IOException ioEx){ System.out.println("Unable to attach to port!"); System.exit(1); } do{ handleClient(); }while(true); } private static void handleClient(){ Socket link = null; // STEP 2
09/03/2009
18
Contoh Program Server try{ link = servSocket.accept(); // STEP 2 Scanner input = new Scanner(link.getInputStream()); // STEP 3 PrintWriter output = new PrintWriter(link.getOutputStream(), true); // STEP 3 int numMessages = 0; String message = ""; do{ message = input.nextLine();
09/03/2009
// STEP 4
19
Contoh Program Server if(!message.equals("QUIT")){ System.out.println("Message received > " + message); numMessages++; output.println("Message " + numMessages + ": " + message); } }while(!message.equals("QUIT")); output.println(numMessages + " messages received."); // STEP 4 } catch(IOException ioEx){ ioEx.printStackTrace(); }
09/03/2009
20
Contoh Program Server finally{ try{ System.out.println("\n* Closing connection... *"); link.close(); // STEP 5 System.out.println("Waiting new connection..."); } catch(IOException ioEx){ System.out.println("Unable to disconnect"); System.exit(1); } } } }
09/03/2009
21
Membuat Program Client
Membuat Program Client
Dalam membuat program client terdapat 5 langkah: 1. 2. 3. 4.
09/03/2009
Membuat sebuah koneksi ke server Menset input dan output stream Mengirim dan menerima data Mengakhiri hubungan (setelah penyelesaian dialog)
23
Membuat Program Client (Langkah ke-1)
Membuat koneksi ke server : ¾
Kita buat objek Socket, memberikan constructor-nya dengan dua argumen berikut: 1. 2.
¾
IP address dari server Nomor port yang digunakan (pada server). Dan tentunya nomor port yang digunakan harus sama antara client dengan server.
Sebagai contoh:
Socket link = new Socket(InetAddress.getByName(“ghan oz2480”),1234); 09/03/2009
24
Membuat Program Client (Langkah ke-2)
Menset input dan output stream: ¾
09/03/2009
Langkah ini sama saja dengan langkah ke-3 dalam membuat program server (Anda bisa melihat kembali pada slide 11-13)
25
Membuat Program Client (Langkah ke-3)
Mengirim dan menerima data: ¾
¾
09/03/2009
Objek Scanner pada client akan menerima pesan yang dikirim oleh objek PrintWriter pada server, sementara objek PrintWriter pada client akan mengirim pesan yang akan diterima oleh objek Scanner pada server (dengan menggunakan method nextLine dan println). Sebagai contoh: String message = input.nextLine(); output.println(message);
26
Membuat Program Client (Langkah ke-4)
Mengakhiri hubungan (setelah penyelesaian dialog): dialog) ¾ ¾
09/03/2009
Menggunakan method close (class Socket) Sebagai contoh: link.close();
27
Contoh Program Client
Contoh Program Client import import import
java.io.*; java.net.*; java.util.*;
public class TCPEchoClient{ private static InetAddress host; private static final int PORT = 2480; public static void main(String args[]){ try{ host = InetAddress.getLocalHost(); } catch(UnknownHostException uhEx){ System.out.println("Host ID not found!"); System.exit(1); } 09/03/2009
29
Contoh Program Client accessServer(); } private static void accessServer(){ Socket link = null; // STEP 1 try{ link = new Socket(host, PORT); // STEP 1 Scanner input = new Scanner(link.getInputStream()); // STEP 2 PrintWriter output = new PrintWriter(link.getOutputStream(), true); // STEP 2
09/03/2009
30
Contoh Program Client // Set up stream for keyboard entry... Scanner userEntry = new Scanner(System.in); String message, response; do{ System.out.print("Client> Enter message: "); message = userEntry.nextLine(); output.println(message); // STEP 3 if(!message.equals("QUIT")){ response = input.nextLine(); // STEP 3 System.out.println("\nServer> " + response); } }while(!message.equals("QUIT")); 09/03/2009
31
Contoh Program Client response = input.nextLine(); // STEP 3 System.out.println(response); } catch(IOException ioEx){ ioEx.printStackTrace(); } finally{ try{ System.out.println("\n* Closing connection... *"); link.close(); // STEP 4 } catch(IOException ioEx){ System.out.println("Unable to disconnect!"); System.exit(1); } } } } 09/03/2009
32
Demo
Demo (localhost)
Demo (localhost)
Sebelum mencoba program antar komputer, kita coba dulu secara localhost Buka dua command, satu untuk menjalankan program server, satu lagi untuk menjalankan program client
09/03/2009
35
Demo (localhost)
Jalankan program server (TCPEchoServer) terlebih dahulu karena jika tidak saat program client (TCPEchoClient) dijalankan akan mengalami crash Setelah dijalankan server akan menunggu koneksi dari client
09/03/2009
36
Demo (localhost)
Jalankan program client Client siap untuk mengirim pesan
09/03/2009
37
Demo (localhost)
Mengirim pesan (“Hallo”) ke server Server meng-echo pesan yang kita kirim tersebut
09/03/2009
38
Demo (localhost)
Server menampilkan pesan (“Hallo”) yang dikirim oleh client
09/03/2009
39
Demo (localhost)
Client memutuskan koneksi dari server Server menunggu koneksi baru dari client
09/03/2009
40
Demo (antar komputer)
Demo (antar komputer)
Saya akan menunjukkan bagaimana jika program-program tersebut dijalankan antar komputer Dilakukan dalam jaringan lokal saya Pada program client ada statement yang perlu dirubah: host = InetAddress.getLocalHost();
Menjadi: host = InetAddress.getByName("ghanoz2480");
Note: dengan argumen nama host dimana program server berada
09/03/2009
42
Demo (antar komputer)
Pada komputer yang menjalankan program server
09/03/2009
43
Demo (antar komputer)
Pada komputer yang menjalankan program client
09/03/2009
44
Catatan
Catatan
Contoh program yang saya tunjukkan tersebut merupakan contoh program dari buku “An Introduction to Network Programming with Java” yang ditulis oleh Jan Graba. Pada contoh program (TCPEchoServer.java dan TCPEchoClient.java) tersebut saya lakukan sedikit perubahan (yang lebih baik tentunya) pada beberapa bagian. Bila Anda ingin melihat contoh program (dari buku) aslinya, saya sertakan pula dengan nama (TCPEchoServerA.java dan TCPEchoClientA.java) Demo program tersebut saya lakukan secara localhost Demo program tersebut juga saya lakukan dengan menggunakan dua komputer. Program tersebut hanya bisa menangani satu koneksi saja, jika ada client lain mencoba untuk membuat hubungan, client tersebut harus menunggu
09/03/2009
46
Referensi
Referensi 1.
2.
Jan Graba, “An Introduction to Network Programming with Java”, Springer, 2007. “JDK6 Documentation”, http://java.sun.com/javase/6/download.jsp#docs
09/03/2009
48
Kritik, saran, dan tanggapan silahkan kirim email ke:
[email protected] [email protected]
09/03/2009
49
Terima Kasih
TheONEmAn2480