Pemrograman Client/Server dengan Java Socket



dokumen-dokumen yang mirip
Pemrograman Jaringan

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

PEMROGRAMAN JARINGAN

Pemrograman Jaringan 9. Connectionless Oriented Programming

A. TUJUAN PEMBELAJARAN

Modul 9 Protokol Transport (TCP/UDP)

Pemrograman Socket TCP dan Socket UDP

Mobile Computing Tugas Individu 1

Pemrograman Jaringan

10.1 Konsep dasar jaringan

Connection Oriented. Kholid F.

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

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

Pemrograman Jaringan 6.

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

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

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

Praktikum Minggu ke-14. Socket Programming

Sistem Terdistribusi 4

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

Pemrograman Socket menggunakan TCP

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

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

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

PEMROGRAMAN SOCKET LANJUTAN

Pemrograman Socket menggunakan UDP

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

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

Membuat Aplikasi Chatting Dengan Java

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

BAB 5 Mendapatkan Input dari Keyboard

IMPLEMENTASI TCP/IP UNTUK MEMBUAT SERVER DATABASE ACCESS ABSTRAK

Pemrograman Jaringan 5.

PRAKTIKUM 7 DASAR INPUT OUTPUT

BAB 2 INPUT DARI KEYBOARD

Mobile Computing. Ramos Somya

PENGANTAR APLIKASI TERDISTRIBUSI (Minggu I Praktikum I)

MK. Pemrograman Berorientasi Objek. Input dari Keyboard. Karmilasari

BAB 5 Mendapatkan Input dari Keyboard

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

BAB Argument Command-Line dan System Properties

PERTEMUAN III OBJEK DAN CLASS TUJUAN PRAKTIKUM

J2ME GUI dan Interkoneksi Client Server

Modul 10 TCP/IP Lanjutan

Modul Praktikum Pemrograman

Nama Lengkap : Muiz Lidinillah NIM :

Bahasa Pemrograman :: Dasar Pemrograman Java

2.1. Sistem Komunikasi

PRAKTIKUM 8 FILE INPUT OUTPUT

Modul 3 Flow Control dan Input

STREAM DAN FILE. PipedInputStream, SequenceInputStream, dan StringBufferInputStream.

Muhammad Zen Samsono Hadi, ST. Msc.

BAB II LANDASAN TEORI

Minggu 6 Transport Layer

Komunikasi Antar Proses

Sistem Terdistribusi

Transport Layer. Oleh : Akhmad Mukhammad

PEMROGRAMAN JARINGAN MODUL 3 STREAM

Sistem Terdistribusi

MODUL 11 J2ME (Java 2 Micro Edition)

JURUSAN SISTEM KOMPUTER FAKULTAS ILMU KOMPUTER UNIVERSITAS SRIWIJAYA

LAMPIRAN 1 Tutorial Implementasi Editor Pengukuran, Pengiriman dan Penerimaan

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

Metode Sequential Searching di Java Console

TRANSPORT LAYER. Aplikasi dan Operasi pada TCP dan UDP

Introduction To Stream

BUKU PETUNJUK PRAKTIKUM PEMROGRAMAN JARINGAN

INTRODUCTION TO ANDROID MOBILE APP DEVELOPMENT MUHAMMAD BAGIR., MTI

Transport Layer El E ectro ect n ro ic En E gineerin ri g Pol o ytech tec nic In I stitu sti t of o Surabaya ITS Kampus ITS Sukolilo Surabaya 60111

Membuat Aplikasi Berbasis Web Di Device Android Mobile

Pemanggilan RESTful Web Service PHP dari Client Java

Pemrograman Fery Updi,M.Kom

APLIKASI CHAT ANTAR PC

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

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

I/O (Input dan Output)

M.Octaviano Pratama

Fungsi Lapis Transport

TCP (Transfer Control Protocol) SOCKET PROGRAMMING

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

Pertemuan 2 Struktur Kontrol Percabangan

Badiyanto, S.Kom., M.Kom. PBO java

TCP/IP (singkatan dari "Transmission Control Protocol")

Sejarah TCP/IP TCP/IP

Pertemuan III [STRUKTUR KONTROL] CariGrade.java Program mencari grade nilai menggunakan struktur control if-else

BAB 1 KONSEP DASAR JAVA

BAB II DASAR TEORI. bersifat umum/non-spesifik (general purpose), dan secara khusus dirancang untuk

dapat dilihat pada gambar 4.25 di bawah ini :

Anonymous Inner Class

BAB 4 PROTOKOL TCP UDP - REMOTE

Pemrograman Database Java

ARSITEKTUR PROTOKOL TCP/IP

TCP DAN UDP. Budhi Irawan, S.Si, M.T

LAB PEMROGRAMAN I (JAVA FUNDAMENTAL) PERTEMUAN 5 Dosen : Bella Hardiyana S. Kom

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

Input Nilai tanpa Case String di Java

PERANCANGAN APLIKASI FILE TRANSFER PROTOCOL DENGAN MENGGUNAKAN BAHASA PEMROGRAMAN JAVA

Cara Membaca File Text di JAVA

Fungsi Lapis Transport

Transkripsi:

Pemrograman Client/Server dengan Java Socket budi susanto (budsus@ukdw.ac.id) Java Socket Socket adalah sebuah abstraksi perangkat lunak yang digunakan sebagai suatu "terminal" dari suatu hubungan antara dua mesin atau proses yang saling berinterkoneksi. Di tiap mesin yang saling berinterkoneksi, harus terpasang socket. Pada J2SE telah disediakan paket java.net yang berisi kelaskelas dan interface yang menyediakan API (Application Programming Interface) level rendah (Socket, ServerSocket, DatagramSocket) dan level tinggi (URL, URLConnection). INGAT: Socket akan membangun komunikasi antar proses yang sama-sama aktif. socket socket Proses TCP (buffer dan variabel) internet/ intranet TCP (buffer dan variabel) Proses dikontrol oleh aplikasi dikontrol oleh sistem operasi dikontrol oleh sistem operasi dikontrol oleh aplikasi Kelas Socket Socket(InetAddress address, int port) membuat sebuah stream socket dan koneksi ke suatu nomor port pada sebuah komputer yang memiliki alamat IP. 1

Socket(String host, int port) membuat sebuah stream socket dan juga koneksi ke suatu port tertentu pada sebuah komputer berdasar namanya. Socket(InetAddress address, int port, InetAddress localaddr, int localport); Socket(String host, int port, InetAddress localaddr, int localport); 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. 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) getsotimeout() Kedua method tersebut digunakan untuk memberi (set) dan 2

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. settcpnodelay(boolean on) gettcpnodelay() Kedua method ini digunakan untuk memberi dan mengambil nilai opsi Socket TCP_NODELAY, yaitu untuk mengaktifkan atau menonaktifkan Algoritma Nagle (RFC 896), yaitu algoritma yang membuat TCP lebih efisien dalam konsumsi bandwidth dengan cara memperlambat penulisan data dalam ukuran yang kecil sehingga data-data yang ada dapat terkirimkan dalam suatu paket dengan ukuran besar. Nilai default opsi ini adalah aktif. Namun jika diinginkan adanya pengurangan network latency (waktu delay dalam pengiriman paket) dan meningkatkan unjuk kerja, maka opsi ini harus di nonaktifkan (di set dengan nilai false), namun akibatnya konsumsi bandwidth akan bertambah besar. setsolinger(boolean on, int linger) getsolinger() Method tersebut akan mengaktifkan (true) atau menonaktifkan (false) opsi SO_LINGER dengan nilai waktu linger dalam milidetik. Opsi ini berpengaruh ketika socket ditutup, yaitu menentukan nilai waktu maksikum koneksi yang masih akan dipertahankan sampai socket koneksi benar-bernar ditutup. Hal ini berguna untuk mengirim dan memberikan ACK (acknowledge) terhadap data yang belum terkirim. setsendbuffersize(int size) getsendbuffersize() Method ini akan mengatur dan mengambil informasi tentang ukuran buffer SO_SNDBUF, yaitu buffer untuk mengiriman. Ukuran ini juga harus disesuaikan ukuran buffer pada level 3

network. setreceivebuffersize(int size) getreceivebuffersize() Method ini digunakan jika Anda ingin mengatur ukuran buffer SO_RCVBUF, yaitu buffer yang digunakan untuk menampung paket yang masuk. Ukuran buffer ini juga digunakan untuk mengatur ukuran window yang diterapkan oleh TCP untuk flow controlnya (sliding window). Dalam pemanfaatan opsi ini, perlu dipastikan antara RCVBUF client dengan server ada sinkronisasi, sehingga sebelum server membind port yang akan digunakan ke socket (TCP) ataupun sebelum client membuka koneksi ke server, terlebih dahulu opsi ini harus di atur, jika Anda ingin mengaturnya. Kelas-kelas Exception yang dibangkitkan Socket, ketika ada kesalahan : 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 lokalhost. 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. 4

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). Contoh : import java.io.*; import java.net.*; public class ExHTTPClient { public static void main(string args[]) { try { Socket clientsocket = new Socket(args[0], 80); System.out.println("Client: " + clientsocket); gethtml(clientsocket, args[1]); catch (UnknownHostException e) { System.out.println(e); catch (IOException e) { System.err.println(e); public static void gethtml(socket clientsocket, String filename) { try { DataOutputStream outbound = 5

new DataOutputStream( clientsocket.getoutputstream() ); DataInputStream inbound = new DataInputStream( clientsocket.getinputstream() ); outbound.writebytes("get " + filename + " HTTP/1.0\r\n\r\n"); String responseline; while ((responseline = inbound.readline())!= null) { System.out.println(responseLine); outbound.close(); inbound.close(); clientsocket.close(); catch (IOException e) { System.out.println(e); Contoh Hasil : # java ExHTTPClient localhost /test.html Client1:Socket[addr=localhost/127.0.0.1,port=80,localport=32777] HTTP/1.1 200 OK Date: Sat, 01 Mar 2003 13:10:34 GMT Server: Apache/1.3.23 (Unix) (Red-Hat/Linux) mod_ssl/2.8.7 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2 mod_perl/1.26 Last-Modified: Sat, 01 Mar 2003 13:02:20 GMT ETag: "932fe-44-3e60af5c" Accept-Ranges: bytes Content-Length: 68 Connection: close Content-Type: text/html 6

<HTML> <BODY> Dokumen ini diakses dari Apache HTTP. </BODY> </HTML> Kelas ServerSocket ServerSocket( int port [, int backlog [, InetAddress bindaddress ]] ) membuat sebuah server dengan port tertentu, batasan jumlah antrian (backlog), dan alamat IP bindaddress. InfoServer.java import java.io.*; import java.net.*; import java.util.*; public class InfoServer { private final int INFO_PORT=50000; private String datafromclient; public InfoServer() { BufferedReader infromclient; 7

DataOutputStream outtoclient; Socket serversocket; try { ServerSocket infoserver = new ServerSocket(INFO_PORT); System.out.println("Server telah siap..."); while (true) { serversocket = infoserver.accept(); System.out.println("Ada client " + "yang terkoneksi!"); infromclient = new BufferedReader( new InputStreamReader( serversocket.getinputstream())); outtoclient = new DataOutputStream( serversocket.getoutputstream()); outtoclient.writebytes("infoserver versi 0.1\n"+ "hanya untuk testing..\n"+ "Silahkan berikan perintah TIME NET QUIT\n"); boolean isquit = false; while (!isquit) { datafromclient = infromclient.readline(); if (datafromclient.startswith("time")) { outtoclient.writebytes(new 8

Date().toString() + "\n"); else if (datafromclient.startswith("net")) { outtoclient.writebytes( InetAddress.getByName("budsusothie").toString() + "\n"); else if (datafromclient.startswith("quit")) { isquit = true; outtoclient.close(); infromclient.close(); serversocket.close(); System.out.println("Koneksi client tertutup.."); catch (IOException ioe) { System.out.print("error: " + ioe); catch (Exception e) { System.out.print("error: " + e); /* program utama */ public static void main(string[] args) { new InfoServer(); 9

InfoClient.java import java.net.*; import java.io.*; import java.util.*; public class InfoClient { private final int INFO_PORT=50000; private final String TargetHost = "localhost"; private final String QUIT = "QUIT"; public InfoClient() { try { BufferedReader infromuser = new BufferedReader(new InputStreamReader(System.in)); Socket clientsocket = new Socket(TargetHost, INFO_PORT); DataOutputStream outtoserver = new DataOutputStream( clientsocket.getoutputstream()); BufferedReader infromserver = new BufferedReader( new InputStreamReader( clientsocket.getinputstream())); System.out.println(inFromServer.readLine()); System.out.println(inFromServer.readLine()); System.out.println(inFromServer.readLine()); System.out.println(""); boolean isquit = false; 10

while (!isquit) { System.out.print("Perintah Anda : "); String cmd = infromuser.readline(); cmd = cmd.touppercase(); if (cmd.equals(quit)) { isquit = true; outtoserver.writebytes(cmd + "\n"); String result = infromserver.readline(); System.out.println("Dari Server: " + result); outtoserver.close(); infromserver.close(); clientsocket.close(); catch (IOException ioe) { System.out.println("Error:" + ioe); catch (Exception e) { System.out.println("Error:" + e); public static void main(string[] args) { new InfoClient(); 11

Kelas DatagramSocket Digunakan untuk membangun koneksi connectionless dengan protokol UDP. DatagramSocket(int port) Kelas ini dapat digunakan untuk menyatakan penggunaan suatu nomor port sebagai "pintu" untuk menerima koneksi dari client. DatagramSocket(int port, InetAddress laddr) Kelas ini membentuk koneksi dengan protokol UDP pada alamat IP lokal tertentu dan pada nomor port tertentu. DatagramSocket() Kelas ini membentuk koneksi dengan protokol UDP pada alamat IP lokal host dengan penentuan nomor portnya secara random berdasar tersedianya nomor port yang dapat digunakan. DatagramPacket(byte[] buf, int length) Kelas ini dapat digunakan untuk mengambil informasi. Constructor ini membutuhkan sebuah array byte yang menjadi parameter pertama, yang berfungsi untuk menyimpan data dan informasi ukuran data yang diterima. 12

DatagramPacket(byte[] buf, int length, InetAddress address, int port) Constructor ini digunakan untuk membuat paket Datagram yang akan mengirim data. Constructor ini memerlukan informasi array byte yang akan dikirim dan panjangnya, serta alamat dan port yang dituju. InfoServerUDP.java import java.io.*; import java.net.*; import java.util.*; public class InfoServerUDP { private final int INFO_PORT=50000; private String datafromclient; public InfoServerUDP() { DatagramSocket serversocket; try { serversocket = new DatagramSocket(INFO_PORT); System.out.println("Server telah siap..."); while (true) { boolean isquit = false; while (!isquit) { byte[] bytefromclient = new byte[1024]; byte[] bytetoclient = new byte[1024]; DatagramPacket receivepacket = new DatagramPacket( bytefromclient, bytefromclient.length); 13

serversocket.receive(receivepacket); InetAddress IPAddress = receivepacket.getaddress(); int port = receivepacket.getport(); String data = new String(receivePacket.getData()); if (data.startswith("time")) { String DateNow = new String(new Date().toString()); bytetoclient = DateNow.getBytes(); else if (data.startswith("net")) { String hostname = new String( InetAddress.getByName("xxx").toString()); bytetoclient = hostname.getbytes(); else if (data.startswith("quit")) { isquit = true; String thanks = new String("Terima kasih!"); bytetoclient = thanks.getbytes(); DatagramPacket sendpacket = new DatagramPacket(byteToClient, bytetoclient.length, IPAddress, port); serversocket.send(sendpacket); System.out.println("Hub. client tertutup.."); 14

catch (IOException ioe) { System.out.print("error: " + ioe); catch (Exception e) { System.out.print("error: " + e); public static void main(string[] args) { new InfoServerUDP(); InfoClientUDP.java import java.net.*; import java.io.*; import java.util.*; public class InfoClientUDP { private final int INFO_PORT=50000; private final String TargetHost = "localhost"; private final String QUIT = "QUIT"; private DatagramSocket clientsocket; public InfoClientUDP() { try { BufferedReader infromuser = new BufferedReader( new InputStreamReader(System.in)); clientsocket = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName("localhost"); 15

boolean isquit = false; while (!isquit) { byte[] bytefromserver = new byte[1024]; byte[] bytetoserver = new byte[1024]; System.out.print("Perintah Anda : "); String cmd = infromuser.readline(); cmd = cmd.touppercase(); isquit = cmd.equals(quit); bytetoserver = cmd.getbytes(); DatagramPacket sendpacket = new DatagramPacket(byteToServer, bytetoserver.length, IPAddress, INFO_PORT); clientsocket.send(sendpacket); DatagramPacket receivepacket = new DatagramPacket(byteFromServer, bytefromserver.length); clientsocket.receive(receivepacket); String result = new String(receivePacket.getData()); System.out.println("Dari Server: " + result); clientsocket.close(); catch (IOException ioe) { System.out.println("Error:" + ioe); 16

catch (Exception e) { System.out.println("Error:" + e); /* program utama */ public static void main(string[] args) { new InfoClientUDP(); 17