modul network programming

89
PRAKTIKUM PEMROGRAMAN JARINGAN Oleh : Arief Prasetyo, S.Kom. NIP. 19790313 200812 1 002 POLITEKNIK NEGERI MALANG 2012

Upload: radtnaviviannaryunii-sartichadewii

Post on 28-Jul-2015

170 views

Category:

Education


8 download

TRANSCRIPT

PRAKTIKUM

PEMROGRAMAN JARINGAN

Oleh :Arief Prasetyo, S.Kom.

NIP. 19790313 200812 1 002

POLITEKNIK NEGERI MALANG

2012

KATA PENGANTAR

Dengan mengucap syukur Alhamdulillah, akhirnya selesai juga pembuatan

buku ajar dengan judul PRAKTIKUM PEMROGRAMAN JARINGAN. Buku

ajar ini diperuntukkan bagi mahasiswa jurusan Teknik Elektro program studi D4

Teknik Informatika tingkat tiga pada semester lima.

Dengan mempelajari buku ini, diharapkan pembaca dapat menguasai

pengetahuan tentang Pemrograman Jaringan, antara lain, InetAddressing, Stream,

Filter Stream, Object Persistence dan Object Serialization, pemrograman

komunikasi UDP dan TCP, pemrogram multicast, serta koneksi URL.

Tiada gading yang tak retak, begitu juga dengan buku ajar ini yang masih

banyak kekurangannya. Untuk itu penulis sangat mengharapkan kritik dan saran

yang membangun, sehingga bisa dilakukan perbaikan. Akhir kata penulis

menyampaikan terima kasih atas bantuan dari berbagai pihak, hanya Allah SWT

yang mampu membalasnya. Dan bagi yang mempelajari buku ini, selamat belajar.

Malang, Nopember 2012

Penulis

DAFTAR ISI

HALAMAN PENGESAHAN...............................................................................II

SURAT PERNYATAAN....................................................................................III

KATA PENGANTAR.........................................................................................IV

DAFTAR ISI..........................................................................................................V

MODUL 1 REVIEW KONSEP JARINGAN.....................................................1

1.1. JARINGAN KOMPUTER (NETWORK).....................................................1

1.2. PRAKTIKUM MODUL 1..............................................................................1

MODUL 2 INTERNET ADDRESS.....................................................................5

2.1. IPV4...............................................................................................................5

2.2. DNS...............................................................................................................6

2.3. ALAMAT IP DAN JAVA.................................................................................6

2.4. PENGGUNAAN INETADDRESS........................................................................7

2.5. PRAKTIKUM MODUL 2...................................................................................8

MODUL 3 STREAM..........................................................................................10

3.1. REVIEW STREAM.........................................................................................10

3.2. INPUT STREAM.............................................................................................11

3.3. PENGGUNAAN INPUT STREAM.....................................................................13

3.4. OUTPUT STREAM.........................................................................................14

3.5. PENGGUNAAN OUTPUT STREAM.................................................................16

3.6. PRAKTIKUM MODUL 3.................................................................................17

MODUL 4 FILTER STREAM..........................................................................18

4.1. DASAR FILTER STREAM..............................................................................18

4.2. FILTER INPUT STREAM................................................................................19

4.2.1. Buffered Input Stream...................................................................................19

4.2.2. Data Input Stream........................................................................................20

4.2.3. LineNumber Input Stream.............................................................................21

4.2.4.PushBackInputStream....................................................................................21

4.3. FILTER OUTPUT STREAM.............................................................................22

4.3.1. Buffered Output Stream................................................................................22

4.3.2. Data Output Stream.....................................................................................22

4.3.3. PrintStream...................................................................................................23

4.4. PRAKTIKUM MODUL 4.................................................................................25

MODUL 5 OBJECT PERSISTENCE DAN OBJECT SERIALIZATION...26

5.1. OBJECT PERSISTENCE...................................................................................26

5.2. OBJECT SERIALIZATION.................................................................................26

5.3. CARA KERJA OBJECT SERIALIZATION...........................................................26

5.4. PERMASALAHAN PADA PENGGUNAAN SERIALISASI....................................27

5.5. MEMBACA DAN MENULISKAN OBJECT PADA STREAM...............................28

5.5.1. Kelas ObjectInputStream..............................................................................28

5.5.2. Kelas ObjectOutputStream...........................................................................28

5.6. PENGGUNAAN OBJECT SERIALIZATION.........................................................29

5.7. PRAKTIKUM MODUL 5.................................................................................32

MODUL 6 PEMROGRAMAN USER DATAGAM PROTOCOL (UDP)....33

6.1. PROTOKOL UDP..........................................................................................33

6.2. UDP PADA JAVA........................................................................................33

6.2.1. DatagramPacket...........................................................................................34

6.2.2. DatagramSocket...........................................................................................36

6.3. MENGIRIM DATA UDP................................................................................38

6.4. MENERIMA DATA UDP...............................................................................38

6.5. PRAKTIKUM MODUL 6.................................................................................39

MODUL 7 PEMROGRAMAN TRANSMISSION CONTROL PROTOCOL

(TCP).....................................................................................................................41

7.1. PROTOKOL TCP...........................................................................................41

7.2. TCP PADA JAVA..........................................................................................41

7.3. SOCKET........................................................................................................42

7.4. SERVERSOCKET...........................................................................................43

7.5. CONTOH PENGGUNAAN SERVERSOCKET....................................................45

7.6. CONTOH PENGGUNAAN SOCKET (KLIEN)....................................................47

7.7. PRAKTIKUM MODUL 7.................................................................................49

MODUL 8 MULTICAST...................................................................................52

8.1. KONSEP KOMUNIKASI MULTICAST.............................................................52

8.2. MULTICASTSOCKET.....................................................................................53

8.3. PENGGUNAAN MULTICASTSOCKET.............................................................56

8.4. PRAKTIKUM MODUL 8.................................................................................58

MODUL 9 UNIFORM RESOURCE LOCATOR............................................59

9.1. KELAS URL.................................................................................................59

9.2. KONEKSI URL.............................................................................................60

9.3. PRAKTIKUM MODUL 9.................................................................................61

DAFTAR PUSTAKA...........................................................................................63

RENCANA PEMBELAJARAN BERBASIS KOMPETENSI........................64

MODUL 1 REVIEW KONSEP JARINGAN

Setelah mempelajari modul ini mahasiswa diharapkan dapat mengingat

kembali konsep jaringan, pengalamatan jaringan dan cara mendesain,

mengkonfigurasi dan menguji jaringan sederhana.

1.1. Jaringan Komputer (NETWORK)

Secara sederhana, jaringan adalah sekumpulan perangkat-perangkat

komunikasi yang dihubungkan dengan suatu media dan menggunakan protokol-

protokol komunikasi yang umum. Perangkat-perangkat di sini termasuk komputer

sebagai host, dan perangkat jaringan perantara seperti hub, switch dan router .

Media jaringan adalah media tempat data / informasi dilewatkan, seperti kabel

tembaga, fiber optik dan atmosfir untuk komunikasi wireless.

Untuk dapat berkomunikasi dalam jaringan komputer, maka diperlukan

pengalamatan antara perangkat-perangkat yang terhubung dalam jaringan

komputer, untuk dapat dibedakan mana komputer/host yang terlibat dalam

komunikasi.

1.2. Praktikum Modul 1

Dalam modul 1 ini, untuk mengingat kembali konsep jaringan komputer

maka kerjakanlah beberapa soal berikut.

1. Dengan menggunakan Packet Tracer, buatlah desain jaringan seperti di

bawah ini :

a. Ada berapa jaringankah yang ada pada diagram jaringan di atas ?

b. Perlukah router diberi konfigurasi routing agar jaringan-jaringan yang

terkoneksi langsung dengan dirinya bisa saling berkomunikasi?

Sebutkan alasannya .

c. Untuk masing-masing host (PC A, PC B & PC C ), berikan alokasi

pengalamatan agar diagram jaringan di atas bisa saling berkomunikasi.

Dengan format :

PC A :

IP address : ....

Subnet mask : ...

Gateway :....

Network ID : ...

d. Berikan konfigurasi pengalamatan untuk masing-masing interface

fastethernet Router, dengan asumsi fastEthernet 0/0 terhubung ke

switch, dan fastEthernet 0/1 terhubung langsung ke PC C.

Router fastEthernet 0/0 :

Ip Address : ...

Subnet mask : ...

Router fastEthernet 0/1 :

IP Address : ...

Subnet mask : ...

e. Kabel jenis bagaimanakah yang digunakan untuk menghubungkan

masing-masing perangkat pada diagram jaringan di atas ? (Straight,

Cross atau Rollover)

PC A – Switch : ...

PC B - Switch : ...

Switch – Router : ...

Router – PC C : ...

f. Perintah apakah yang dapat digunakan untuk mengecek koneksi antar

host yang ada ?

2. Dengan menggunakan Packet Tracer, buatlah desain jaringan seperti di

bawah ini :

a. Ada berapa jaringankah yang ada pada diagram jaringan di atas ?

b. Perlukah router diberi konfigurasi routing agar jaringan-jaringan

yang terkoneksi langsung dengan dirinya bisa saling

berkomunikasi? Mengapa ?

c. Untuk masing-masing host (PC A, PC B , PC C , PC D), berikan

alokasi pengalamatan agar diagram jaringan di atas bisa saling

berkomunikasi. Dengan format :

PC A :

IP address : ....

Subnet mask : ...

Gateway :....

Network ID : ...

d. Berikan konfigurasi pengalamatan untuk masing-masing interface

fastethernet Router, dan pada Router1 dengan asumsi fastEthernet 0/0

terhubung ke switch, dan fastEthernet 0/1 terhubung langsung ke PC C.

Ethernet 0/0 terhubung ke Fastethernet 0/0 Router 1, FastEthernet 0/1

router 1 terhubung ke PC D.

Router fastEthernet 0/0 :

Ip Address : ...

Subnet mask : ...Router fastEthernet 0/1 :

IP Address : ...

Subnet mask : ...Router Ethernet 0/0

IP Address : ...Subnet mask : ...

Router1 fastEthernet 0/0 :Ip Address : ...Subnet mask : ...

Router1 fastEthernet 0/1 :

IP Address : ...

Subnet mask : ...

e. Kabel jenis bagaimanakah yang digunakan untuk menghubungkan masing-

masing perangkat pada diagram jaringan di atas ? (Straight, Cross atau

Rollover)

PC A – Switch : ...

PC B - Switch : ...

Switch – Router : ...

Router – PC C : ...

Router – router 1 : ...

Router1 – PC D : ...

f. Perintah apakah yang dapat digunakan untuk mengecek koneksi antar host

yang ada ?

MODUL 2 INTERNET ADDRESS

Setelah mempelajari modul ini, mahasiswa diharapkan :

- mengerti struktur alamat IP dan DNS

- memahami dan mampu menerapkan class InetAddress

Host adalah perangkat yang terhubung dalam suatu jaringan komputer.

Host dapat berupa komputer, router, IP kamera, IP printer, akses poin, perangkat

genggam, dan lain sebagainya. Setiap host dalam jaringan internet atau TCP/IP

diidentifikasikan dengan alamat unik yang terdiri dari 4 byte Internet Protocol

(IP).

Setiap alamat IP dituliskan perbagiannya dipisahkan dengan titik, dengan

contoh format 192.168.1.10, di mana setiap bagian (byte) – nya menggunakan

integer positif antara 0 sampai 255. Sehingga ada sekitar 4 milyar alamat IP yang

bisa dibuat secara unik. Walaupun begitu, saat ini jumlah sedemikian itu tidaklah

cukup dibagi untuk perangkat-perangkat atau host yang ada dan terus diproduksi

saat ini.

Sehingga solusinya adalah penggunaan IPv6 yang terdiri dari 128 bit

alamat, yang artinya 4x lebih banyak dari IPv4 yang hanya terdiri dari 32 bit (4

byte) alamat. Saat ini, tidak semua ISP menerapkan IPv6 pada jaringan yang

dikelolanya.

2.1. IPv4

Setiap 32 bit alamat IP terdiri dari 2 komponen :

- alamat network

bagian yang digunakan untuk mengidentifikasi alamat jaringan tempat

host tersebut terkoneksi

- alamat host

bagian alamat yang secara unik bisa mengidentifikasikan host itu

sendiri

Ada tiga kelas dalam pengalamatan IP, yaitu kelas A, kelas B, dan kelas C.

Untuk IP kelas A, byte pertama selalu di awali dengan bit 0. Untuk kelas B, byte

pertama selalu di awali dengan bit 10, dan untuk kelas C, byte pertamanya selalu

diawali dengan bit 110.

2.2. DNS

Alamat IP yang berbentuk numerik dapat pula dipetakan dalam bentuk

nama untuk kemudahan pemakaian oleh user, seperti www.google.com,

mail.yahoo.com, dan lain sebagainya.

DNS (Domain Name Server) lah yang bertugas untuk memetakan, dan

mentranslasikan antara alamat IP dengan nama host, dan juga sebaliknya dalam

rangka komunikasi yang dilakukan antara host-host yang ada pada jaringan. DNS

merupakan sebuah sistem terdistribusi.

2.3. Alamat IP dan JAVA

Java memiliki klas untuk mendefinisikan alamat IP, yaitu class

java.net.InetAddress. Kelas ini memiliki tiga fungsi :

a. mengenkapsulasi alamat

b. melakukan name-lookup (mengkonversi nama host ke alamat

IP)

c. melakukan reverse-lookup (mengkonversi alamat IP ke nama

host

Objek dari class tersebut tidaklah dibuat dengan memanggil konstruktor

classnya. Tidak ada konstuktor dari class InetAddress. Melainkan dengan

memanggil method static dari class ini. Yaitu :

- public static InetAddress getByName(String

host) throws UnknownHostException

- public static InetAddress[ ]

getAllByName(String host) throws UnknownHostException

- public static InetAddress getLocalHost() throws

UnknownHostException

Setiap pembuatan objek dengan menggunakan method static di atas

membutuhkan pengecekan dengan DNS. Pada java 1.4 ditambahkan method static

untuk pembuatan objek dari class InetAddress yang tidak membutuhkan

pengecekan dengan DNS lokal. Yaitu dengan menggunakan method :

- public static InetAddress getByAddress(byte[ ]

address) throws UnknownHostException

- public static InetAddress getByAddress(String

hostName, byte[] address) throws UnknownHostException

Selain method untuk menginstansi objek, class InetAddress memiliki

method getter untuk memanggil nama host dalam bentuk String dan alamat IP

dalam bentuk String atau array byte.

• public String getHostName()

• public byte[ ] getAddress()

• public String getHostAddress()

2.4. Penggunaan InetAddress

Contoh penggunaan class InetAddress pada komputer yang terkoneksi

dengan jaringan Internet adalah sebagai berikut :

import java.net.InetAddress;

import java.net.UnknownHostExcepion;

public static void main(String[] args)

{

try {

InetAddress inet1 =

InetAddress.getByName("psmi.poltek-

malang.ac.id");

System.out.println(

"HostAddress=" + inet1.getHostAddress());

InetAddress inet2 =

InetAddress.getByName("192.168.134.134");

System.out.println("HostName=" + inet2.getHostName());

if (inet1.equals(inet2))

System.out.println("Alamat sama !");

else System.out.println (“Alamat tidak sama!”);

}

catch (UnknownHostException uhe) {

uhe.printStackTrace();

}

}

Program di atas membuat 2 objek InetAddress yaitu inet1 dan inet2. inet1

membuat objek InetAddress dengan memanggil method static dengan parameter

inputan berupa String nama host yaitu psmi.poltek-malang.ac.id. Sedangkan inet 2

dibuat objeknya dengan menggunakan method static yang parameter inputannya

adalah alamat IP, yaitu 192.168.134.134. Lalu dilakukan proses pembandingan

objek inet1 dengan inet2, apakah inet1 dan inet2 merujuk ke host yang sama atau

tidak. Hasil dari pembandingan kedua objek akan ditampilkan di console melalui

System.out.

2.5. Praktikum Modul 2

1. Coba tuliskan dan kerjakan kode di atas dan laporkan hasil keluaran aplikasi

tersebut.

2. Buatlah aplikasi yang menggunakan objek InetAddress di mana anda bisa

memasukkan nama host, lalu output yang dikeluarkan adalah alamat IP dari

nama host yang diinputkan.

3. Buatlah aplikasi yang menggunakan objek InetAddress di mana anda bisa

memasukkan ip address, lalu aplikasi akan mengeluarkan output nama host

dari IP yang diinputkan.

MODUL 3 STREAM

Setelah mempelajari modul 3 ini, mahasiswa diharapkan :

- mampu memahami konsep stream

- mampu menerapkan class stream

Komunikasi pada jaringan, dengan file, atau antar aplikasi

direpresentasikan dengan Stream oleh JAVA. Komunikasi berbasis Stream adalah

inti dari hampir semua komunikasi aplikasi yang dikembangkan menggunakan

JAVA. Konsep stream merupakan dasar yang penting dalam mengembangkan

aplikasi jaringan.

3.1. Review Stream

Komunikasi pada level byte, direpresentasikan oleh JAVA menggunakan

stream, sebagai wadah tempat informasi dikirim ataupun tempat informasi

diterima. Stream dapat dianalogikan dengan pipa air, yang apabila terpasan

dengan baik, air (dalam hal ini informasi atau data) dapat mengalir dari suatu

tempat ke tempat lain.

Dalam membangun sebuah aplikasi, kita harus dapat memilih jenis class

stream yang tepat untuk aplikasi kita. Stream dapat digabungkan bersama-sama

untuk mendapatkan kemudahan pengolahan informasi.

Ada 2 macam kategori besar Stream :

- input stream : dimana informasi dapat kita baca / ambil

- output stream : dimana informasi dapat kita tulis / kirim

3.2. Input Stream

Paket Input Stream terletak pada java.io.InputStream. Merupakan stream

dimana kita bisa membaca aliran informasi dari suatu sumber.

Ada 6 macam input stream yang bisa kita gunakan dari paket tersebut.

Saat input stream dibuat, objeknya akan membaca informasi dari sumber

informasi.

Low-level Input Stream Fungsi

byteArrayInputStream Membaca data byte dari array di memory

FileInputStream membaca data byte dari sebuah file pada sistem file lokal

PipedInputStream Membaca data byte dari pipe thread

StringBufferInputStream Membaca data byte dari sebuah string

SequenceInputStream Membaca data byte dari stream input lain

System.in Membaca data byte dari konsol user

Kelas abstrak InputStream memiliki method-method umum yang

diwariskan pada semua class turunannya, yang mana bersifat public. Method-

method tersebut adalah :

– int available ( ) throws java.io.IOException : untuk mengetahui

jumlah byte data yang saat ini tersedia untuk dibaca.

– void close ( ) throws java.io.IOException : menutup input stream

dan melepaskan sumber daya yang terkait dengan input stream

tersebut (contoh : file yang menjadi sumber input stream)

– void mark(int readLimit) : mencatat posisi input stram saat ini,

agar nanti bisa kembali ke titik yang dicatat dengan memanggil

method InputStream.reset() . Tidak semua input stream

mendukung method ini.

– boolean markSupported ( ) : mengembalikan nilai “true” apabila

input stream mendukung mark() dan reset().

– int read( ) throws java.io.IOException : mengambil byte data

berikutnya dari stream. Subkelas dari InputStream biasanya

menuliskan ulang method ini untuk menyesuaikan fungsinya

(seperti untuk membaca dari string spt pada

StringBufferInputStream, atau untuk membaca dari file seperti

pada FileInputStream). Input stream akan mengeblok penggunaan

I/O, dan akan memblok seterusnya hingga ada byte data berikutnya

untuk dibaca. Apabila akhir dari stream tercapai, nilai -1 akan

dimunculkan.

– int read(byte[ ] byteArray) throws java.io.IOException :

membaca serangkaian byte dan menempatkannya pada array byte

yang ditunjuk dalam paramete input, dengan berulang-ulang

memanggil methode read() hingga array byte tersebut penuh terisi

atau tidak ada lagi data yang tersedia untuk di baca. Method ini

akan mengembalikan nilai integer jumlah byte data yang dibaca

secara sukses, atau -1 apabila akhir stream telah tercapai.

– int read(byte [ ] byteArray, int offset, int length) throws

java.io.IOException, java.lang.IndexOutOfBoundsException

– void reset( ) throws java.io.IOException : mengembalikan posisi

stream ke posisi yang telah ditandai oleh method mark().

– long skip(long amount) throws java.io.IOException : membaca

data byte, tapi diabaikan selama sejumlah nilai yang diinputkan

dalam parameter (long amount). Data yang dibaca tidak disimpan,

tetapi proses pembacaan terus mengalir maju.

3.3. Penggunaan Input Stream

Contoh penggunaan kelas turunan InputStream untuk menampilkan isi dari

sebuah file dapat dilihat pada kode di bawah ini. Di mana file dimasukkan pada

parameter awal pemanggilan program ini (nama file dimasukkan sebagai

argumen).

import java.io.*;public class FileInputStreamDemo {

public static void main(String args[]){

if (args.length != 1){System.err.println ("Syntax - FileInputStreamDemo

file");return;

}try{// Membuat input stream yang membaca dr fileInputStream fileInput = new FileInputStream

( args[0] );

int data = fileInput.read(); // Baca byte ke 1

while (data != -1) // ulangi : hingga end of file (EOF) dicapai

{System.out.write ( data ); // menampilkan byte

data ke consoledata = fileInput.read(); // baca byte berikutnya}

fileInput.close(); // Close the file}catch (IOException ioe)

{System.err.println ("I/O error - " + ioe);

}}}

3.4. Output Stream

Paket OutputSteam terletak pada java.io.OutputStream. Output stream

merupakan stream dimana kita bisa menuliskan infomasi untuk dikirim ke sesuatu

penerima informasi.

Turunan output stream yang bisa langsung kita gunakan ada 6 kelas, yang

memiliki fungsi masing-masing, seperti menuliskan string , menuliskan data ke

file atau ke pipa komunikasi. Output stream merupakan produsen informasi, dia

membuat byte dari informasi dan mengirimkannya ke tempat lain. Data

dikomunikasikan secara sekuensial, data byte yang pertama masuk stream akan

pertama kali keluar pula.

Low-Level Output Stream Fungsi

ByteArrayOutputStream Menuliskan data byte ke sebuah

array byte

FileOutputStream Menuliskan data byte ke sebuah

file lokal

PipedOutputStream Menuliskan data byte ke pipa

komunikasi

StringBufferOutputStream Menuliskan byte ke sebuah string

buffer

System.err Menuliskan data byte ke stream

error pada konsol pengguna

System.out Menuliskan data byte ke konsol

pengguna

Method-method yang dimiliki oleh output stream antara lain adalah :

– Void close( ) : menutup output stream, dan memberitahu ujung

stream satunya (penerima) bahwa stream telah berakhir.

– Void flush( ) : melakukan “flushing” data yang belum terkirim ke

sisi penerima dari output stream. Untuk meningkatkan performasi

aplikasi, sering kali stream diberi buffer, sehingga data-data

disimpan terlebih dahulu sebelum dikirim. Method ini cukup

penting bagi subkelas output stream yang digunakan pada operasi

jaringan, dimana ‘flushing’ data selalu terjadi setelah terjadi

operasi request atau response dikirimkan sehingga host lawan

komunikasi tidak menunggu-nunggu data.

– Void write(int byte) : menuliskan byte yang diinputkan pada

parameter method ini. Merupakan method abstrak yang dioverride

oleh subklas-subklas turunan output stream.

– Void write(byte[ ] byteArray) : menuliskan isi dari array byte

yang menjadi parameter method ini.

– Void write(byte[ ] byteArray, int offset, int length)

3.5. Penggunaan Output Stream

Di sini diberikan contoh penggunaan output stream pada sebuah kode

aplikasi di mana aplikasi ini akan mengopy sebuah file dengan cara membaca isi

dari suatu file dan menuliskannya ke file lain. Operasi dilakukan byte per byte.

import java.io.*;public class FileOutputStreamDemo {

public static void main(String args[]){

if (args.length != 2) // Two parameters are required, the source and destination

{System.err.println ("Syntax -

FileOutputStreamDemo src dest");return;

}String source = args[0];String destination = args[1];try{

// Open source file for inputInputStream input = new

FileInputStream( source );System.out.println ("Opened " + source + "

for reading.");OutputStream output = new FileOutputStream

( destination ); // Ouput output file for outputSystem.out.println ("Opened " +

destination + " for writing.");int data = input.read();while ( data != -1){

// Write byte of data to our fileoutput.write (data);// Read next bytedata=input.read();

}// Close both streamsinput.close();output.close();System.out.println ("I/O streams closed");

}catch (IOException ioe){

System.err.println ("I/O error - " + ioe);}

}}

3.6. Praktikum Modul 3

1. Tuliskan kode penggunaan Input Stream dan Output Stream yang ada

pada sub bab 3.3 dan 3.5.

2. Buat modifikasi pada kode Input Stream di subbab 3.3, sehingga

aplikasi tidak lagi membutuhkan argumen dalam eksekusinya, melainkan

memunculkan dialog untuk membuka file yang ada pada komputer kita.

3. Buat modifikasi pada kode Output Stream di subbab 3.5 agar nama file

input dan file output (hasil copy) ditampilkan dalam bentuk dialog.

MODUL 4 FILTER STREAM

Setelah mempelajari modul 4 ini, mahasiswa diharapkan :

- dapat memahami fungsi dan mengetahui kelebihan dari filter stream

- dapat menerapkannya dalam aplikasi

Karena stream dasar hanya menerapkan mekanisme pembacaan byte dari

informas atau data secara sederhana, maka fleksibilitasnya terbatas. Pembacaan

byte dari data tidaklah simpel, arti dari byte bisa bervariasi tergantung jenis

datanya. Teks contohnya, merupakan rangkaian dari karakter karakter, dan contoh

lain adalah deretan angka-angka yang mana masing-masing karakter dan angka

bisa dibentuk lebih dari satu byte data tunggal. Komunikasi pada level byte juga

bisa sangat tidak efisien, dan pemberian buffer juga dapat meningkatkan

performasi dari sistem. Permasalahan-permasalahan tersebut bisa diatasi dengan

penggunaan filter stream.

4.1. Dasar Filter Stream

Filter Stream menambahkan fungsionalitas pada stream-stream dasar,

dengan memproses data sedemikian rupa (seperti penambahan buffer untuk

meningkatkan kinerja) atau menambahkan method-method untuk mengakses data

dalam cara yang berbeda ( seperti membaca data per baris, dibandingkan

pembacaan data standar yang byte per byte).

Filter Stream dibagi pula menjadi 2 kategori : filter input stream dan filter

output stream. Setiap filter stream disambungkan ke input stream atau output

stream dalam penggunaannya. Menyambungkan filter stream sangat sederhana,

buat objek filter streamnya ( dengan memasukkan stream yang sudah ada ke

parameter input method pembentuknya), dan selanjutnya proses pembacaan atau

penulisan data cukup melalui filter stream tersebut.

Contoh apabila kita ingin menggunakan salah satu filter output stream

yang bertipe PrintStream (digunakan untuk mencetak teks ke subclass dari Output

Stream) pada stream output yang menuliskan data ke file. Kode di bawah ini dapat

digunakan :

FileOutputStream fout = new FileOutputStream ( somefile );

PrintStream pout = new PrintStream (fout);

pout.println ("hello world");

Dapat dilihat bahwa penulisan atau pembacaan yang tadinya dilakukan

pada stream dasar, apabila telah dihubungkan dengan sebuah filter stream, maka

penulisan atau pembacaan data dilakukan pada filter streamnya.

4.2. Filter Input Stream

Beberapa filter input stream yang umum dan terdapat pada semua versi

Java adalah sebagai berikut :

Filter Input Stream Keguanaan

BufferedInputStream Memberi buffer pengaksesan data, untuk

meningkatkan efisiensi dan kinerja

DataInputStream Membaca tipe data primitif (int, float, double etc)

LineNumberInputStrea

m

Menjaga hitungan jumlah baris dari data yang

sedang dibaca berdasarkan karakter-karakter yang

memiliki interpretasi end-of-line

PushBackInputStream Filter yang memungkinkan pembacaan data dan

mengembalikannya lagi ke dalam stream untuk

dibaca lagi.

4.2.1. Buffered Input Stream

Kegunaan dari memberikan buffer pada I/O adalah menambah performasi

kerja. Dibandingkan dengan pembacaan data byte per byte, sejumlah besar byte

dibaca bersamaan pada saat method read()class ini dieksekusi. Hal ini

meningkatkan kecepatan waktu akses dari sumber data dan mengurangi jumlah

blok aplikasi ke input yang menjadi sumber data.

Konstruktor buffered input stream :

1. BufferedInputStream(inputStream input) : membuat stream dengan

buffer yang akan membaca dari input stream yang dijadikan parameter

2. BufferedInputStream(InputStream input, int bufferSize) : membuat

stream dengan buffer sesuai ukuran yang ditentukan, yang akan membaca

dari input stream yang dijadikan parameter.

Method-method :

Tidak ada method tambahan. Hanya memodifikasi method read(), dan

mendukung pemakaian method mark() dan reset().

4.2.2. Data Input Stream

Penulisan dan pembacaan data bertipe primitif seperti angka dan karakter

sangat sering dijumpai dalam pemrograman. Informasi / data seperti itu tidak

mudah direpresentasikan dalam byte-byte. Dengan filter stream ini, pengembang

aplikasi tidak perlu susah-susah dalam mengkonversi data byte ke data primitif.

Tetapi cukup dengan memanfaatkan method dari kelas filter stream ini, yang

otomatis melakukan mentranlasi data.

• Konstruktor :

DataInputStream( InputStream input)

• Method-method :

Boolean readBoolean( )

Byte readByte( )

char readChar( )

double readDouble( )

float readFloat( )

void readFully(byte[ ] byteArray)

void readFully(byte[] byteArray, int offset, int length)

float readInt( )

string readLine( )

long readLong( )

short readShort( )

int readUnsignedByte( )

int readUnsignedShort( )

String readUTF( )

Static String readUTF(DataInputStream input)

int skipBytes(int number).

4.2.3. LineNumber Input Stream

Memberikan fungsionalitas yang berguna yaitu memantau jumlah baris

data yang telah dibaca dari input stream.

• Konstruktor :

LineNumberInputStream(InputStream input) – membuat sebuah line

number stream, yang membaca dari input stream input

• Methods

int getLineNumber( ) – mengembalikan nilai jumlah baris yang telah

dibaca dari input stream yang bersangkutan

void setLineNumber(int number) – mengubah nilai counter nomor baris

menjadi nilai yang ditentukan dalam number

4.2.4.PushBackInputStream

Memiliki kemampuan untuk membaca sebuah byte data tunggal, lalu

dikembalikan lagi ke dalam input stream untuk dibaca kemudian. Untuk itu dia

mempunyai sebuah buffer internal. Kelas ini berguna bila programmer ingin

‘mengintip’ data apa yang akan dibaca selanjutnya dari rangkaian byte data pada

input stream.

• Konstruktor

– PushBackInputStream(InputStream input)

– PushBackInputStream(InputStream input, int bufferSize) –

membuat PushBackInputStream yang akan membaca dari input

stream dan menggunakan buffer dengan besar yang ditentukan

• Method-method

– void unread(byte[] byteArray) – mengembalikan isi dari array

byteArray.

– void unread(byte[] byteArray, int offset, int length)

– void unread(int byte) – mengembalikan byte yang diinputkan ke

awal dari buffer

4.3. Filter Output Stream

Beberapa filter output stream yang umum dan terdapat pada semua versi

Java adalah sebagai berikut :

Filter Output Stream Kegunaan

BufferedOutputStrea

m

Menyediakan buffer untuk menuliskan data

DataOutputStream Menuliskan tipe data primitif seperti bytes dan angka.

PrintStream Menyediakan method tambahan untuk menuliskan baris teks

atau tipe data lain sebagai sebuah teks

4.3.1. Buffered Output Stream

Memiliki buffer internal yang dikelolanya, dimana apabila buffer tersebut

penuh, maka isi dari buffer akan dikosongkan untuk dimasukkan ke output stream

dimana dia terhubung.

• Konstruktor

– BufferedOutputStream(OutputStream output) – membuat buffer

untuk menuliskan data pada output stream yang ditunjuk (default

buffer nya sebesar 512 bytes)

– BufferedOutputStream(OutputStream output, int bufferSize) –

membuat objek bufferedOutputStream yang terhubung pada output

stream yang ditunjuk dengan ukuran buffer yang ditentukan.

• Methods

Tidak memiliki method tambahan selain bawaan dari kelas Output Stream.

4.3.2. Data Output Stream

Didesain untuk bekerja dengan tipe data primitif seperti angka-angka atau

bytes.

• Konstruktor

– DataOutputStream(OutputStream output) – membuat objek data

output stream yang terhubung dengan output stream yang ditunjuk

• Method

– int size( ) – mengembalikan jumlah byte yang telah dikirimkan

pada data output stream

– void writeBoolean(boolean value) – menuliskan nilai boolean yang

ditentukan dalam bentuk byte

– void writeByte(int byte) – menuliskan byte yang ditentukan pada

output stream

– void writeBytes(String string) – menuliskan seluruh isi string ke

output stream sebagai byte, satu per satu byte

– void writeChar(int char) – menuliskan karakter ke output stream

sebagai nilai byte (2 byte per karakter)

– void writeChars(String string) – menuliskan seluruh isi string ke

output stream sebagai byte, masing-masing karakter diwakili 2

byte

– void writeDouble(double doubleValue) – mengkonversi nilai data

double yang dimasukkan menjadi nilai long, lalu mengkonversinya

lagi ke dalam bentuk 8-byte data.

– void writeFloat(float floatValue) – mengkonversi nilai data float

yang dimasukkan menjadi nilai int, lalu mengkonversinya lagi ke

dalam bentuk 4-byte data.

– void writeInt(int intValue) – menuliskan nilai int sebagai 4-byte

data

– void writeLong(int intValue) – menuliskan nilai long sebagai 8-

byte data

– void writeShort(int intValue) – menuliskan nilai short sebagai 2-

byte data

– void writeUTF(String string) – menuliskan isi string menggunakan

UTF-8 encoding

4.3.3. PrintStream

Kelas ini menyediakan cara yang mudah untuk menuliskan tipe data

primitif sebagai bentuk teks menggunakan method print(..) atau println (..) untuk

menuliskannya dengan memberikan line separator.

• Konstuktor :

- PrintStream(OutputStream output)

- PrintStream(OutputStream output, boolean flush) – membuat print

stream dimana bila nilai boolean diset ‘true’, maka buffer yang

dimilikinya bisa otomatis melakukan ‘flushing’ data

- Method

o boolean checkError( ) – automatically flushed the output

stream and checks to see if an error has occurred

o void print(boolean value) – print a boolean value

o void print(char character) – prints a character value

o void print(char [] charArray) – prints an array of characters

o void print(double doubleValue) – prints a double value

o void print(float floatValue) – prints a float value

o void print(int intValue) – prints an int value

o void print(long longValue) – prints a long value

o void print(Object obj) – prints the value of the specified

object’s toString( ) method

o void print(String string) – prints a string’s contents

o void println( ) – sends a line separator (\n)

o void println(char character) – prints a character value followed

by a println()

o void println(char[] charArray) – prints an array of characters

followed by println()

o void println(double doubleValue) – prints a double value

followed by println() Methods

o void println(float floatValue) – prints a float value followed by

println()

o void println(int intValue) – prints an int value followed by

println()

o void println(long longValue) – prints a long value followed by

println()

o void println(Object obj) – prints the value of the specified

object’s toString( ) method followed by println()

o void println(String string) – prints a string followed by a line

separator

o protected void SetError( ) – modifies the error flag to a value

of “true”

4.4. Praktikum Modul 4

1. Tambahkan filter input stream pada aplikasi yang telah Anda

kerjakan pada praktikum Modul 4 no 2. Yaitu filter stream :

BufferedInputStream pada FileInputStream yang Anda gunakan

untuk membaca dari file. Bandingkan kinerja aplikasi setelah

modifikasi (catat waktunya). Hitung waktunya untuk membuka file

dengan ukuran di atas 1 Megabyte.

2. Tambahkan filter stream pada aplikasi yang telah Anda kerjakan

pada praktikum Modul 3 no 3. Yaitu berikan BufferedInputStream

dan BufferedOutputStream pada saat pembacaan dan penulisan

file. Bandingkan waktunya.

MODUL 5 OBJECT PERSISTENCE DAN OBJECT

SERIALIZATION

Setelah mempelajari modul 5 ini, mahasiswa diharapkan :

- mampu memahami konsep object persistence

- mampu menerapkan object persistence dengan menggunakan object

serialization pada aplikasi

5.1. Object Persistence

Object persistence adalah kemampuan sebuah object untuk tetap hidup

dalam sebuah sistem, tidak terpengaruh waktu dan ruang (space), bahkan apabila

aplikasi pembuat object tersebut telah dihentikan atau komputer dimatikan. Untuk

itu objek yang diinginkan supaya persistence harus disimpan secara utuh.

Penyimpanan objek secara utuh melibatkan penyimpanan struktur data

yang dimiliki oleh objek tersebut, nilai-nilai atribut yang dimilikinya, dan

pemetaan terhadap referensi ke objek lain apabila ada, sekaligus objek yang

direferensikannya. Proses itu merupakan sebuah proses yang kompleks dan rumit.

5.2. Object Serialization

Object Serialization adalah teknik yang bisa mewujudkan object

persistence. Teknik ini mengontrol bagaimana data yang berisi informasi-

informasi nilai dan status sebuah objek (termasuk nilai atribut-atributnya, hak

akses tiap atributnya baik itu public, protected atau private, dan lain sebagainya)

dituliskan dan disimpan dalam bentuk rangkaian byte-byte data.

Objek yang diserialisasi nantinya dapat dikirimkan lewat jaringan, atau

disimpan dalam file, untuk kemudian dapat diakses di lain waktu sesuai

kebutuhan. Hal tersebut memungkinkan pindahnya suatu objek dari satu JVM ke

JVM lain, entah dalam satu mesin atau mesin yang berbeda.

5.3. Cara Kerja Object Serialization

Setiap objek yang mengimplementasikan interface

java.IO.Serializable dapat diserialisasikan hanya dengan beberapa baris kode.

Mengimplementasikannya sama dengan cara menerapkan interface-interface yang

lain pada JAVA, yaitu dengan menambahkan keyword implement pada

deklarasi class yang diinginkan dan menggunakan konstrukto tanpa argumen

tambahan. Interface ini menunjukkan bahwa class yang kita buat dapat

mendukung serialisasi objek. Tidak ada method tambahan yang perlu

diimplementasikan pada class tersebut.

Contoh deklarasi class yang menerapkan interface tersebut :

Public class SomeClass extends SomeOtherClass implements

java.io.Serializable {

public class SomeClass()

}

}

………

}

5.4. Permasalahan pada Penggunaan Serialisasi

Terdapat beberapa masalah pada awal munculnya metode serialisasi.

Contohnya apabila objek yang ingin kita serialisasi memiliki informasi rahasia /

sensitif yang tidak patut kita ikutkan dalam serialisasi untuk disimpan dalam

bentuk file ke media penyimpanan atau dikirimkan ke jaringan.

Apabila ada kasus seperti ini : kelas yang ingin kita serialisasi memiliki

atribut password dimana bisa secara mudah dibaca apabila diserialisasikan. Untuk

mencegah hal-hal tersebut, maka diciptakanlah keyword trancient. Keyword

tersebut bisa diberikan pada deklarasi anggota / atribut dari kelas yang tidak kita

inginkan untuk diikutkan pada proses serialisasi.

Contoh penggunaan trancient pada deklarasi kelas :

Public class UserAccount implements java.io.Serializable {

protected String username;

protected transient String password;

public UserAccount( )

{

….

}

}

5.5. Membaca dan Menuliskan Object pada Stream

Point utama dari serialisasi adalah bagaimana kita menuliskan objek ke

stream dan bagaimana cara mendapatkannya kembali untuk bisa digunakan. Hal

tersebut bisa dilakukan dengan menggunakan kelas

java.io.ObjectOutputStream dan java.io.ObjectInputStream .

5.5.1. Kelas ObjectInputStream

Digunakan untuk mengambil objek yang terserialisasi dari byte stream

untuk dapat direkonstruksi ulang menjadi bentuk asli objek tersebut.

Kelas ObjectInputStream mengimplementasikan interface ObjectInput

yang merupakan turunan dari interface DataInput. Artinya kelas ini menyediakan

banyak method untuk beroperasi dengan banyak tipe data seperti halnya pada

kelas DataInputStream.

• Konstruktor

• Protected ObjectInputStream () – merupakan

konstruktor default untuk turunan dari ObjectInputStream

• ObjectInputStream( InputStream input) – membuat

object input stream yang terkoneksi dengan input stream

yang ditunjuk, dapat digunakan untuk mengembalikan

objek yang terserialisasi

• Method - method

• Public final Object readObject( ) – membaca objek

yang terserialisasi dari stream dan merekonstruksinya

kembali

5.5.2. Kelas ObjectOutputStream

Kelas ini digunakan untuk menserialisasi objek dan dikirimkan melalui

byte stream dalam rangka object persistence. Bisa dihubungkan ke semua output

stream seperti file output dan networking stream.

• Konstuktor

• Protected ObjectOutputStream ( ) – konstruktor

default

• ObjectOutputStream (OutputStream output) –

membuat objek output stream yang mampu menserialisasi

objek dan dikirim melalui stream output yang ditunjuk

• Method-method

• Void writeObject (Object object) – menuliskan

objek yang dimaksud ke output stream melalui proses

serialisasi.

5.6. Penggunaan Object Serialization

Contoh penggunaan object serialization dapat dilihat pada kode aplikasi di

awah ini, di mana aplikasi membuat objek yang dapat disimpan dan dipanggil

kembali lengkap dengan informasi dan status terakhir (nilai-nilai atribut yang

dimiliki) objek tersebut.

import java.io.*;

import java.util.*;

// Chapter 4, Listing 5

public class SerializationDemo

{

public static void main(String args[])

{

try

{

Vector list;

// Create a buffered reader for easy input

BufferedReader reader = new BufferedReader

( new InputStreamReader ( System.in ) );

System.out.println ("Checking for previous

serialized list");

// Check to see if serialized list exists

try

{

FileInputStream fin = new FileInputStream

("list.out");

// Connect an object input stream to the

// list

ObjectInputStream oin = new ObjectInputStream

( fin );

try

{

// Read the vector back from the list

Object obj = oin.readObject();

// Cast back to a vector

list = (Vector) obj;

}

catch (ClassCastException cce)

{

// Can't read it, create a blank one

list = new Vector();

}

catch (ClassNotFoundException cnfe)

{

// Can't read it, create a blank one

list = new Vector();

}

fin.close();

}

catch (FileNotFoundException fnfe)

{

// Create a blank vector

list = new Vector();

}

// Repeat indefinitely

for (;;)

{

// Now, display menu

System.out.println ("Menu :-");

System.out.println ("1.. Add item");

System.out.println ("2.. Delete item");

System.out.println ("3.. List items");

System.out.println ("4.. Save and quit");

System.out.print ("Choice : ");

// Read choice

String response = reader.readLine();

// Convert to an int

int choice = Integer.parseInt (response);

switch (choice)

{

case 1 :

// Add the item to list

System.out.print

("Enter item : ");

String item = reader.readLine();

list.addElement(item);

break;

case 2 :

// Delete the item from list

System.out.print

("Enter item : ");

String deadItem =

reader.readLine();

list.removeElement(deadItem);

break;

case 3 :

// List the elements of the list

for (Enumeration e =

list.elements();

e.hasMoreElements();)

{

System.out.println

(e.nextElement());

}

break;

case 4 :

// Save list and terminate

System.out.println

("Saving list");

FileOutputStream fout =

new FileOutputStream

( "list.out" );

// Construct an object output stream

ObjectOutputStream oout = new

ObjectOutputStream ( fout );

// Write the object to the stream

oout.writeObject (list);

fout.close();

System.exit(0);

}

}

}

catch (IOException ioe)

{

System.err.println ("I/O error");

}

}

}

5.7. Praktikum Modul 5

1. Tuliskan kembali kode aplikasi di atas dan jalankan. Laporkan apa

yang terjadi pada hasil eksekusi aplikasi.

2. Jika pada aplikasi di atas, objek yang diserialisasi adalah objek

bertipe list; modifikasilah dengan membuat class baru beserta

atribut-atributnya untuk diserialisasikan ke dalam file.

MODUL 6 PEMROGRAMAN USER DATAGAM

PROTOCOL (UDP)

Setelah mempelajari modul 6 ini, mahasiswa diharapkan :

- mampu memahami User Datagram Protocol (UDP)

- mampu menerapkan komunikasi UDP pada aplikasi menggunakan

JAVA

6.1. Protokol UDP

UDP merupakan protokol lapisan Transport yang sederhana, bersifat

connectionless, yang secara detil dijelaskan pada artikel RFC 768. Protokol ini

memiliki keunggulan sedikitnya informasi tambahan pada header data yang

dibutuhkan untuk mengirimkan data, atau disebut dengan overhead rendah.

Pecahan/bagian data pada protokol ini disebut dengan datagram.

Protokol ini juga disebut protokol yang tidak handal atau unreliable.

Artinya saat kita mengirim data UDP (datagram), kita tidak tahu apakah datagram

tersebut sampai ke tujuan atau tidak, ataupun jika sampai, datagram-datagram

diterima secara urut atau tidak. Namun bagaimanapun, protokol ini bisa mengirim

data dengan cepat karena rendahnya overhead yang dimilikinya, tidak seperti pada

protokol TCP yang overhead datanya tinggi.

Informasi yang ada pada header segmen UDP hanya berisi nomor port

aplikasi pengirim dan nomor port aplikasi penerima/tujuan.

Aplikasi-aplikasi yang menggunakan protokol UDP antara lain adalah :

DNS Video Streaming Voice over IP (VoIP)

Soket UDP bisa menerima data dari lebih dari satu mesin atau host.

6.2. UDP pada JAVA

JAVA mendukung pemrograman komunikasi protokol UDP dengan

menyediakan 2 kelas :

java.net.DatagramSocket

java.net.DatagramPacket

6.2.1. DatagramPacket

Kelas DatagramPacket mewakili paket data yang ingin ditransmisikan

menggunakan protokol UDP. Kelas ini terdiri dari array bertipe byte yang menjadi

tempat data yang ingin dikirim, atau tempat data yang akan diterima. Kelas ini

juga memiliki alamat IP dan alamat port.

Dua alasan kita membutuhkan objek DatagramPacket :

1. Untuk mengirim data ke komputer lain menggunakan UDP

2. Untuk menerima data dari komputer lain menggunakan UDP

Konstruktor yang bisa kita gunakan bergantung dari alasan untuk apa

objek DatagramPacket tersebut kita buat tadi. Untuk mengirim datagram, maka

konstruktornya adalah :

- public DatagramPacket(byte[] data, int

length, InetAddress remote, int port)

- public DatagramPacket(byte[] data, int

offset, int length, InetAddress remote, int

port)

contoh :

InetAddress addr = InetAddress.getByName("192.168.0.1");

DatagramPacket packet = new DatagramPacket ( new byte[128],

128, addr, 2000);

Sedangkan konstruktor untuk menerima datagram adalah :

- public DatagramPacket(byte[] buffer, int

length)

- public DatagramPacket(byte[] buffer, int

offset, int length)

contoh :

DatagramPacket packet = new DatagramPacket(new byte[256], 256);

Sedangkan method-method yang dimiliki class DatagramPacket antara

lain :

InetAddress getAddress()— mengembalikan alamat IP asal

datagram, atau IP tujuan datagam

byte[] getData()— mengembalikan isi dari DatagramPacket,

yaitu array byte.

int getLength()— mengembalikan nilai panjangnya isi data yang

ada pada DatagramPacket.

int getPort()— mengembalikan nomor port asal datagram, atau

port tujuan datagam, tergantung jenis datagramnya

void setAddress(InetAddress addr)— mengeset alamat

baru untuk DatagamPacket

void setData(byte[] buffer)— memberikan buffer data

baru dalam bentuk array byte

void setLength(int length)— mengeset panjang dari

DatagramPacket dengan nilai yang dimasukkan. Perlu diingat bahwa

panjangnya harus lebih kecil dari ukuran maksimum data buffer atau

IllegalArgumentException akan terjadi.

void setPort(int port)— memberikan nilai port tujuan baru

bagi DatagramPacket.

6.2.2. DatagramSocket

Kelas ini digunakan untuk mengirim dan menerima DatagramPacket dari

atau ke jaringan.

Konstuktor :

• DatagramSocket(int port)

digunakan untuk menyatakan penggunaan suatu nomor port sebagai

"pintu" untuk menerima koneksi dari client. untuk membuat server

datagram socket

• DatagramSocket(int port, InetAddress laddr)

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. untuk membuat

client datagram socket

Method-method :

• void close()— menutup socket dan melepaskannya dari port

lokal.

• void connect(InetAddress remote_addr int

remote_port)— membatasi akses menuju alamat tujuan dan port

komputer tujuan

• void disconnect()— memutuskan DatagramSocket.

• InetAddress getInetAddress()— mengembalikan alamat

komputer tujuan dimana socket terhubung, atau null apabila tidak ada

koneksi ke tujuan.

• int getPort()— mengembalikan alamat port komputer tujuan

jika socket terhubung, atau -1 apabila tidak ada koneksi

• InetAddress getLocalAddress()— mengembalikan alamat

lokal dimana soket terkoneksi

• int getLocalPort()— mengembalikan nilai alamat port di

mana soket terkoneksi

• int getReceiveBufferSize() throws

java.net.SocketException— mengembalikan nilai ukuran

maksimum buffer untuk paket UDP yang akan diterima

• int getSendBufferSize() throws

java.net.SocketException— mengembalikan nilai ukuran

maksimum buffer untuk paket UDP yang akan dikirim

• int getSoTimeout() throws

java.net.SocketException— mengembalikan nilai optional

timeout soket. Nilai ini digunakan untuk menentukan berapa milidetik

suatu operasi pembacaan akan memblok sebelum mengeluarkan pesan

error java.io.InterruptedIOException. Secara default, nilai ini akan

berisi 0, menandakan bahwa I/O yang terblok akan dapat digunakan..

• void receive(DatagramPacket packet) throws

java.io.IOException— membaca paket UDP dan menyimpan

isi paket tersebut. Atribut alamat dan port dari paket akan ditulis ulang

dengan alamat pengirim dan port pengirim, dan atribut panjang paket

akan berisi panjang paket asli yang mana bisa lebih kecil dari ukuran

array byte paket. Jika nilai atribut timeout tidak ditentukan

menggunakan metode DatagramSocket.setSoTimeout(int duration),

method ini akan memblok seterusnya. Jika sudah ditentukan, maka

error java.io.InterruptedIOException akan dikeluarkan apabila waktu

melebihi waktu timeout yang sudah ditentukan.

• void send(DatagramPacket packet) throws

java.io.IOException— mengirim paket UDP, yang

dimasukkan sebagai parameter.

• void setReceiveBufferSize(int length) throws

java.net. SocketException— mengeset ukuran maksimum

buffer yang digunakan untuk UDP packet yang diterima.

• void setSendBufferSize(int length) throws

java.net.SocketException— mengeset ukuran maksimum

buffer yang digunakan untuk UDP packet yang dikirim.

• void setSoTimeout(int duration) throws

java.net.SocketException— mengeset nilai option timeout

soket. Berupa jumlah milidetik yang diperbolehkan untuk melakukan

blok pada operasi pembacaan sebelum dinyatakan error

java.io.InterruptedIOException.

6.3. Mengirim Data UDP

Langkah-langkah untuk mengirim datagram UDP ke sebuah server UDP :

a. Mengkonversi data yang mau dikirim ke dalam bentuk array byte

b. Memasukkan array byte tadi, panjang data dalam array, dan

InetAddress serta nomor port tujuan ke dalam DatagramPacket

lewat konstruktornya

c. Buat DatagramSocket menggunakan konstruktornya (client

DatagramSocket) , dan memanggil method send() dengan

memasukkan DatagramPacket yang telah dibuat.

Contoh :

InetAddress ia = InetAddress.getByName(“localhost");

int Port = 19;

String s = "My second UDP Packet";

byte[] b = s.getBytes();

DatagramPacket dp = new DatagramPacket(b, b.length, ia,

Port);

DatagramSocket sender = new DatagramSocket();

sender.send(dp);

6.4. Menerima Data UDP

Langkah untuk menerima datagram UDP dari klien adalah :

a. Buatlah sebuah DatagramPacket kosong (DatagramPacket untuk

menerima data)

b. Buatlah objek DatagramSocket melalui konstruktornya

(DatagramSocket untuk server)

c. Lalu panggil method receive () dari datagramSocket dengan

memasukkan DatagramPacket kosong yang telah dibuat tadi untuk

menampung datagram yang datang.

d. Ambil datanya dalam bentuk array byte pada DatagramPacket yang

telah terisi. Lalu konversikan ke bentuk data yang diinginkan.

Contoh :

try {

byte buffer = new byte[65536];

DatagramPacket incoming = new DatagramPacket(buffer,

buffer.length);

DatagramSocket ds = new DatagramSocket(2134);

ds.receive(incoming);

byte[] data = incoming.getData();

String s = new String(data, 0, data.getLength());

System.out.println("Port " + incoming.getPort() + " on " +

incoming.getAddress() + " sent this message:");

System.out.println(s);

}catch (IOException e) {

System.err.println(e);}

6.5. Praktikum Modul 6

1. Lengkapi potongan kode untuk menerima data (pada bagian 6.5)

dan potongan kode untuk mengirim data (pada bagian 6.4) menjadi

aplikasi yang dapat dieksekusi. Jalankan aplikasi yang menerima

data dan aplikasi yang mengirim data pada komputer yang berbeda.

(Sesuaikan objek InetAddressnya untuk masing-masing aplikasi).

2. Modifikasi aplikasi-apblikasi di atas, sehingga pada aplikasi yang

mengirim data, data yang dikirim dapat dimasukkan oleh user

lewat dialog.

MODUL 7 PEMROGRAMAN TRANSMISSION

CONTROL PROTOCOL (TCP)

Setelah mempelajari modul 7 ini, mahasiswa diharapkan :

- mampu memahami protokol TCP

- mampu menerapkan komunikasi TCP pada aplikasi menggunakan

JAVA

7.1. Protokol TCP

TCP merupakan protokol yang bersifat connection-oriented, dijelaskan

secara detil pada artikel RFC 793. TCP menggunakan overhead yang lebih besar

dibanding dengan UDP untuk mendukung fungsi-fungsi yang dimilikinya.

Fungsi-fungsi yang dimiliki TCP adalah urutan pengiriman data seperti pada saat

dikirim (same order delivery), pengiriman data yang handal (reliable delivery) dan

adanya pengaturan kecepatan aliran data (flow control). Setiap segmen TCP

memiliki 20 byte overhead dalam header segmen datanya, dimana segmen UDP

hanya membutuhkan overhead 8 byte pada header segmen datanya.

Informasi yang ada pada header segmen data TCP adalah nomor port

aplikasi pengirim & tujuan, nomor sekuen segmen untuk mengurutkan segmen,

informasi acknowledgment untuk konfirmasi data telah diterima tujuan (reliable

delivery), informasi yang dibutuhkan untuk flow control.

Aplikasi yang menggunakan protokol TCP adalah :

Web Browser Email File Transfer

7.2. TCP pada Java

Pada Java, komunikasi TCP dilakukan dengan menggunakan socket. TCP

memulai pengiriman data dengan membentuk suatu koneksi antara komputer yang

akan berkomunikasi terlebih dahulu, diikuti transfer data, dan pemutusan koneksi.

Hal ini diakomodasi dengan socket. Operasi-operasi yang bisa dilakukan pada

socket adalah :

– Koneksi ke mesin remote

– Mengirim data

– Menerima data

– Mentutup koneksi

– Bind to a port

– Listen pada data yang masuk

– Menerima koneksi dari mesin remote pada port tertentu

Ada 2 kelas yang disediakan oleh JAVA yang dapat digunakan untuk

komunikasi TCP :

o java.net.Socket

o java.net.ServerSocket

Untuk membuat aplikasi klien yang akan melakukan koneksi ke servis

yang ada, kita harus menggunakan Socket. Sedangkan untuk membuat aplikasi

server yang mengikat suatu port tertentu dalam memberikan servis, kita

menggunakan ServerSocket.

7.3. Socket

Pembentukan koneksi dilakukan oleh konstruktor Socket. Setiap objek

Socket terasosiasi dengan hanya satu komputer lawan komunikasi (remote host).

Untuk membuat koneksi dengan komputer lain, maka harus dibuat objek Socket

yang lain.

Konstruktor :

• public Socket(String host, int port) throws

UnknownHostException,IOException

• public Socket(InetAddress address, int port)

throws IOException

• public Socket(String host, int port,

InetAddress localAddress, int localPort)throws

IOException

• public Socket(InetAddress address, int port,

InetAddress localAddress,int localPort) throws

IOException

Untuk melakukan pengiriman atau penerimaan data, dilakukan dengan

menggunakan input dan output stream. Method-method yang digunakan untuk

mendapatkan referensi input stream socket dan output stream socket adalah :

public InputStream getInputStream() throws

IOException

public OutputStream getOutputStream() throws

IOException

Setelah selesai melakukan komunikasi pengiriman data, kita harus

menutup socket. Metode untuk menutup socket adalah :

public void close() throws IOException

Secara umum, prinsip atau langkah kerja penggunaan Socket dapat

dirangkum sebagai berikut :

1. Membentuk koneksi ke server, dengan membuat objek Socket dan

menentukan :

a. alamat IP server ( melalui objek InetAddress)

b. alamat port servis yang diinginkan

Socket sok = new Soket (InetAddress.getLocalHost(), 123);

2. Mengeset input dan output Stream

Scanner input = new Scanner(sok.getInputStream());

PrintWriter output = new

PrintWriter(sok.getOutputStream(),true);

3. Mengirim dan menerima data

a. Objek scanner pada klien akan menerima data yang dikirim

oleh objek PrintWriter yang ada pada server

b. Objek printwriter pada klien akan mengirimkan data yang

akan diterima objek Scanner pada server

4. Menutup koneksi (socket)

7.4. ServerSocket

Kelas ServerSocket bertindak sebagai soket yang ada pada server. Kelas

ini dibentuk dengan mengikat port tertentu yang ada pada komputer server. Lalu

selanjutnya menggunakan method accept() untuk siap menerima koneksi yang

datang dari klien.

Method accept() yang dipanggil dari ServerSocket akan mengembalikan

objek socket untuk melakukan koneksi dengan klien. Selama belum ada koneksi

dari klien, method ini akan memblok I/O kecuali telah diset waktu timeout-nya.

Konstruktor :

public ServerSocket(int port) throws

IOException

public ServerSocket(int port, int backlog)

throws IOException

public ServerSocket(int port, int backlog,

InetAddress bindAddr)throws IOException

Method :

public Socket accept() throws IOException

public void close() throws IOException

Secara umum, prinsip atau langkah kerja penggunaan ServerSocket adalah

sebagai berikut :

1. Membuat objek ServerSocket

ServerSocket servsok = new ServerSocket(123);

2. Membuat server ke posisi/status menunggu koneksi

Socket link = servsok.accept();

3. Mengeset input dan output stream

Scanner input = new Scanner(link.getInputStream());

PrintWriter output = new

PrintWriter(link.getOutputStream());

4. Mengirim dan menerima data

output.println(“Menunggu data ... “);

String input = input.nextLine();

5. Menutup koneksi

link.close()

7.5. Contoh Penggunaan ServerSocket

import java.io.*;

import java.net.*;

public class simpleServer

{

public final static int TESTPORT = 1234;

public static void main(String args[])

{

ServerSocket checkServer = null;

String line;

BufferedReader is = null;

DataOutputStream os = null;

Socket clientSocket = null;

try

{

checkServer = new ServerSocket(TESTPORT);

System.out.println("Server Ready ...");

}

catch (IOException e)

{

System.out.println(e);

}

try

{

clientSocket = checkServer.accept();

is = new BufferedReader(new

InputStreamReader(clientSocket.getInputStream()));

os = new

DataOutputStream(clientSocket.getOutputStream());

}

catch (Exception ei)

{

ei.printStackTrace();

}

try

{

line = is.readLine();

System.out.println("From Client : " + line);

os.writeBytes(line);

if (line.compareTo("polinema") == 0)

{

os.writeBytes("Welcome To Polinema.");

}

else

{

os.writeBytes("Sorry, this is private

area.");

}

}

catch (IOException e)

{

System.out.println(e);

}

try

{

os.close();

is.close();

clientSocket.close();

}

catch (IOException ic)

{

ic.printStackTrace();

}

}}

7.6. Contoh Penggunaan Socket (klien)

import java.io.*;

import java.net.*;

public class simpleClient

{

public final static int REMOTE_PORT = 1234;

public final static String host = "localhost";

public static void main(String args[]) throws Exception

{

Socket cl = null;

BufferedReader is = null;

DataOutputStream os = null;

BufferedReader stdin = new BufferedReader(new

InputStreamReader(S

String userInput = null;

String output = null;

try

{

cl = new Socket(host, REMOTE_PORT);

is = new BufferedReader(new

InputStreamReader(cl.getInputStream()))

os = new DataOutputStream(cl.getOutputStream());

}

catch(UnknownHostException e1)

{

System.out.println("Unknown Host: " + e1);

}

catch (IOException e2)

{

System.out.println("Erorr io: " + e2);

}

try

{

System.out.print("Your University ? ");

userInput = stdin.readLine();

os.writeBytes(userInput + "\n");

}

catch (IOException ex)

{

System.out.println("Error writing to server..." + ex);

}

try

{

output = is.readLine();

System.out.println("From server: " + output);

}

catch (IOException e)

{

e.printStackTrace();

}

try

{

is.close();

os.close();

cl.close();

}

catch (IOException x)

{

System.out.println("Error writing...." + x);

}

}

}

7.7. Praktikum Modul 7

1. Buatlah aplikasi TCPEchoClient dengan kode dibawah ini :

import java.net.*; // for Socketimport java.io.*; // for IOException and Input/OutputStream

public class TCPEchoClient {

public static void main(String[] args) throws IOException {

if ((args.length < 2) || (args.length > 3)) // Test for correct # of args throw new IllegalArgumentException("Parameter(s): <Server> <Word> [<Port>]");

String server = args[0]; // Server name or IP address // Convert input String to bytes using the default character encoding byte[] byteBuffer = args[1].getBytes();

int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7;

// Create socket that is connected to server on specified port Socket socket = new Socket(server, servPort); System.out.println("Connected to server...sending echo string");

InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream();

out.write(byteBuffer); // Send the encoded string to the server

// Receive the same string back from the server int totalBytesRcvd = 0; // Total bytes received so far int bytesRcvd; // Bytes received in last read while (totalBytesRcvd < byteBuffer.length) { if ((bytesRcvd = in.read(byteBuffer, totalBytesRcvd, byteBuffer.length - totalBytesRcvd)) == -1) throw new SocketException("Connection close prematurely"); totalBytesRcvd += bytesRcvd; }

System.out.println("Received: " + new String(byteBuffer));

socket.close(); // Close the socket and its streams }}

2. Buatlah aplikasi TCPEchoServer dengan kode di bawah ini :

import java.net.*; // for Socket, ServerSocket, and InetAddressimport java.io.*; // for IOException and Input/OutputStream

public class TCPEchoServer {

private static final int BUFSIZE = 32; // Size of receive buffer

public static void main(String[] args) throws IOException {

if (args.length != 1) // Test for correct # of args throw new IllegalArgumentException("Parameter(s): <Port>");

int servPort = Integer.parseInt(args[0]);

// Create a server socket to accept client connection requests ServerSocket servSock = new ServerSocket(servPort);

int recvMsgSize; // Size of received message byte[] byteBuffer = new byte[BUFSIZE]; // Receive buffer

for (;;) { // Run forever, accepting and servicing connections Socket clntSock = servSock.accept(); // Get client connection

System.out.println("Handling client at " + clntSock.getInetAddress().getHostAddress() + " on port " + clntSock.getPort());

InputStream in = clntSock.getInputStream(); OutputStream out = clntSock.getOutputStream();

// Receive until client closes connection, indicated by -1 return while ((recvMsgSize = in.read(byteBuffer)) != -1) out.write(byteBuffer, 0, recvMsgSize);

clntSock.close(); // Close the socket. We are done with this client! } /* NOT REACHED */ }}

3. Jalankan masing-masing aplikasi sesuai dengan parameter yang

dibutuhkan masing-masing aplikasi.

4. Modifikasi masing-masing aplikasi sehingga argumen yang

dibutuhkan untuk menjalankan masing-masing aplikasi bisa

diinputkan oleh user sesudah aplikasi dieksekusi. Bukan pada saat

memanggil aplikasi.

MODUL 8 MULTICAST

Setelah mempelajari modul 8 ini, mahasiswa diharapkan mampu :

- memahami dan mengerti komunikasi multicast

- mengetahui cara kerja multicast dan mampu menerapkan komunikasi

multicast pada aplikasi

8.1. Konsep Komunikasi Multicast

Komunikasi socket yang telah kita bahas selama ini bersifat unicast,

mereka hanya menyediakan komunikasi data point-to-point. Tidak semua

komunikasi data cocok dengan model unicast, atau broadcast yang mengirimkan

data ke semua titik yang ada pada jaringan. Contoh kasus pada videoconference,

hanya anggota grup yang menerima komunikasi antar mereka. Komunikasi seperti

itu disebut dengan multicast.

Untuk memulai komunikasi multicast, harus terbentuk dulu suatu grup

multicast. Setiap host/titik pada jaringan yang ingin bergabung, harus

mendaftarkan diri dahulu sebelum menerima komunikasi yang ada pada grup.

Multicast komunikasi menggunakan alamat multicast, dan host/komputer-

komputer yang tergabung disebut grup multicast.

Alamat multicast adalah alamat IP dalam range 224.0.0.0 sampai

239.255.255.255, yang secara biner diawali dengan 1110 sebagai 4 bit pertama

alamat IPnya. Alamat ini disebut juga alamat IP kelas D.

Anggota dari grup multicast berbagi alamat multicast yang sama. Setiap

data yang dikirim ke sebuah alamat multicast akan diteruskan ke semua anggota

grup multicast yang beralamat multicast tersebut. Keanggotaan pada grup

multicast bersifat terbuka, dalam artian setiap anggota grup multicast dapat

bergabung atau keluar grup sesuai keinginan.

Pada JAVA, komunikasi multicast dilakukan menggunakan kelas – kelas :

- DatagramPacket, dan

- MulticastSocket yang merupakan subclass dari DatagramSocket

8.2. MulticastSocket

Paket MulticastSocket terletak pada java.net.MulticastSocket. Cara

kerjanya mirip dengan DatagramSocket, karena memang turunan dari kelas

DatagramSocket.

Konstruktor :

• public MulticastSocket( ) throws

SocketException membuat objek multicastSocket yang

terikat pada anonymous port (terserah alokasi dari sistem), cocok

untuk klien dimana tidak membutuhkan port khusus/tertentu untuk

menerima jawaban dari server yang dihubungi.

Contoh :

try {

MulticastSocket ms = new MulticastSocket( );

// send some datagrams...

}

catch (SocketException se) {

System.err.println(se);

}

• public MulticastSocket(int port) throws

SocketException membuat objek MulticastSocket untuk

menerima datagram dari port yang ditentukan

Contoh :

try {

MulticastSocket ms = new MulticastSocket(40

// receive incoming datagrams...

}

catch (SocketException ex) {

System.err.println(ex);

}

• public MulticastSocket(SocketAddress

bindAddress) throws IOException membuat objek

MulticastSocket menggunakan objek SocketAddress. Jika

SocketAddress nya adalah objek yang mengikat alamat port tertentu,

maka konstruktor ini akan sama persis dengan konstruktor

sebelumnya.

Contoh :

try {

SocketAddress address = new InetSocketAddress(4000);

MulticastSocket ms = new MulticastSocket(address);

// receive incoming datagrams...

}

catch (SocketException ex) {

System.err.println(ex);

}

Jika objek SocketAddress terikat pada alamat dan port dari sebuah

interace, maka multicastSocket hanya akan menerima data dari port

dan alamat interface yang ditentukan (contoh kasus server yang

memiliki banyak interface network).

Contoh :

try {

SocketAddress address = new

InetSocketAddress("192.168.254.32", 4000);

MulticastSocket ms = new MulticastSocket(address);

// receive incoming datagrams...

}

catch (SocketException ex) {

System.err.println(ex);

}

Begitu objek MulticastSocket terbentuk, ada 4 operasi yang bisa dilakukan

oleh objek ini :

1. Join ke sebuah grup multicast

2. Mengirim data ke grup multicast

3. Menerima data dari grup multicast

4. Meninggalkan grup multicast.

Untuk bekerja menggunakan MulticastSocket, kita bisa menggunakan

method-method yang dimilikinya :

• public void joinGroup(InetAddress address)

throws IOException

• public void joinGroup(SocketAddress address,

NetworkInterface interface) throws

IOException // Java 1.4

• public void leaveGroup(InetAddress address)

throws IOException

• public void leaveGroup(InetAddress address)

throws IOException

• public void leaveGroup(SocketAddress

multicastAddress, NetworkInterface

interface)throws IOException // Java 1.4

• public void send(DatagramPacket packet, byte

ttl)throws IOException

• public void setInterface(InetAddress

address)throws SocketException

• public InetAddress getInterface( ) throws

SocketException

• public void

setNetworkInterface(NetworkInterface

interface)throws SocketException // Java 1.4

• public NetworkInterface getNetworkInterface( )

throws SocketException // Java 1.4

• public void setTimeToLive(int ttl) throws

IOException // Java 1.2

• public void setTimeToLive(int ttl) throws

IOException // Java 1.2

• public void setLoopbackMode(boolean disable)

throws SocketException

• public boolean getLoopbackMode( ) throws

SocketException

• receive( )

8.3. Penggunaan MulticastSocket

Pada contoh berikut ini akan diterapkan penggunaan multicastSocket pada

aplikasi yang bernama MulticastSniffer. Aplikasi ini akan membaca nama dari

grup multicast yang dimasukkan lewat konsol, membuat InetAddress dari nama

yang kita masukkan dari konsol tadi, lalu membuat MulticastSocket untuk

bergabung ke grup multicast dari nama host tadi. Jika berhasil maka aplikasi ini

akan menerima datagram dari socket dan mencetaknya pada konsol (System.out).

Aplikasi berguna untuk mengetahui bahwa kita menerima data multicast dari

sebuah host. Hampir semua data multicast adalah data biner yang mana tidak akan

berarti apa-apa bila dicetak sebagai karakter ASCII.

import java.net.*;

import java.io.*;

public class MulticastSniffer {

public static void main(String[] args) {

InetAddress group = null;

int port = 0;

// read the address from the command line

try {

group = InetAddress.getByName(args[0]);

port = Integer.parseInt(args[1]);

} // end try

catch (Exception ex) {

// ArrayIndexOutOfBoundsException, NumberFormatException,

// or UnknownHostException

System.err.println(

"Usage: java MulticastSniffer multicast_address port");

System.exit(1);

}

MulticastSocket ms = null;

try {

ms = new MulticastSocket(port);

ms.joinGroup(group);

byte[] buffer = new byte[8192];

while (true) {

DatagramPacket dp = new DatagramPacket(buffer,

buffer.length);

ms.receive(dp);

String s = new String(dp.getData( ));

System.out.println(s);

}

}

catch (IOException ex) {

System.err.println(ex);

}

finally {

if (ms != null) {

try {

ms.leaveGroup(group);

ms.close( );

}

catch (IOException ex) {}

}

}

}

}

Contoh berikutnya adalah aplikasi bernama MulticastSender, yaitu aplikasi

yang akan mengirim data yang diinputkan lewat konsol sebagai argumen, ke grup

multicast. Secara umum sangat sederhana.

import java.net.*;

import java.io.*;

public class MulticastSender {

public static void main(String[] args) {

InetAddress ia = null;

int port = 0;

byte ttl = (byte) 1;

// read the address from the command line

try {

ia = InetAddress.getByName(args[0]);

port = Integer.parseInt(args[1]);

if (args.length > 2) ttl = (byte)

Integer.parseInt(args[2]);

}

catch (Exception ex) {

System.err.println(ex);

System.err.println(

"Usage: java MulticastSender multicast_address port

ttl");

System.exit(1);

}

byte[] data = "Here's some multicast data\r\n".getBytes(

);

DatagramPacket dp = new DatagramPacket(data,

data.length, ia, port);

try {

MulticastSocket ms = new MulticastSocket( );

ms.joinGroup(ia);

for (int i = 1; i <= 10; i++) {

ms.send(dp, ttl);

}

ms.leaveGroup(ia);

ms.close( );

}

catch (SocketException ex) {

System.err.println(ex);

}

catch (IOException ex) {

System.err.println(ex);

}

}

}

8.4. Praktikum Modul 8

1. Untuk praktikum, tuliskan kode yang ada pada contoh di atas dan jalankan

masing-masing aplikasi pada komputer yang berbeda.

2. Modifikasilah aplikasi sehingga argumen tidak lagi diperlukan melainkan

dimasukkan melalui dialog GUI.

MODUL 9 UNIFORM RESOURCE LOCATOR

Setelah mengikuti modul 9 ini, mahasiswa diharapkan :

- mampu mengetahui tentang URL

- mampu menerapkannya dalam aplikasi

9.1. Kelas URL

Kelas URL adalah cara paling sederhana untuk sebuah program Java untuk

menemukan dan mengambil data dari jaringan. Anda tidak perlu khawatir tentang

rincian protokol yang digunakan, format data yang diambil, atau bagaimana

berkomunikasi dengan server, anda cukup memberitahu URL dan mendapatkan

data untuk Anda.

Kelas java.net.URL adalah sebuah abstraksi dari Uniform Resource

Locator (URL) seperti http://www.hamsterdance.com/ atau

ftp://ftp.redhat.com/pub/. Listing program berikut adalah contoh penggunaan

kelas URL yang meliputi pengecekan URL dan berbagai cara penulisannya

menggunakan kelas URL.

URL terdiri dari lima bagian, yaitu Skema atau dikenal sebagai protokol,

kewenangan, path, fragmen pengenal, juga dikenal sebagai bagian atau ref serta

string query. Contohnya adalah sebagai berikut:

http://java.sun.com:80/docs/books/tutorial/index.html#DOWNLOADING

Contoh penerapannya adalah sebagai berikut:

import java.net.*;

public class urltest1 {

public static void main (String args[]) {

URL webURL, ftpURL;

try {

webURL = new URL("http://www.macfaq.com/vendor.html");

System.out.println(webURL);

ftpURL = new URL("ftp://ftp1.macfaq.com/pub/");

System.out.println(ftpURL);

}

catch (MalformedURLException e) {

System.err.println("URL Salah");

}

}

}

9.2. Koneksi URL

URLConnection adalah kelas abstrak yang merupakan sambungan aktif ke

sumber daya yang ditentukan oleh URL. Kelas URLConnection memiliki dua

tujuan yang berbeda tetapi terkait.

Pertama, memberikan kontrol lebih besar atas interaksi dengan server

(terutama server HTTP) daripada kelas URL. Dengan URLConnection, Anda

dapat memeriksa header yang dikirimkan oleh server dan respon yang sesuai.

Anda dapat mengatur field header yang digunakan dalam permintaan klien. Anda

dapat menggunakan URLConnection untuk men-download file biner.

Akhirnya, URLConnection sebuah memungkinkan Anda mengirim data

kembali ke server web dengan POST atau GET dan menggunakan metode

permintaan HTTP yang lain.

Untuk membuat sebuah program yang menggunakan kelas

URLConnection diperlukan urutan langkah-langkah dasar sebagai berikut:

- Buatlah objek URL.

- Panggil metode openConnection() untuk mengambil objek

URLConnection dari suatu URL.

- Mengkonfigurasi URLConnection tersebut.

- Baca field header.

- Dapatkan input stream dan membaca data.

- Dapatkan output stream dan menulis data.

- Menutup koneksi.

Contoh program dibawah ini akan membaca data dari URL www.poltek-

malang.ac.id. Hasil dari program adalah kode-kode HTML penyusun web.

import java.net.*;

import java.io.*;

public class URLConnectionReader

{

public static void main(String[] args) throws Exception

{

URL alamat = new URL("http://www.poltek-

malang.ac.id");

URLConnection yc = alamat.openConnection();

BufferedReader in = new BufferedReader(

new InputStreamReader(

yc.getInputStream()));

String inputLine;

while ((inputLine = in.readLine()) != null)

System.out.println(inputLine);

in.close();

}

}

9.3. Praktikum Modul 9

1. Jalankan contoh-contoh aplikasi yang ada pada modul 9 di atas.

2. Buatlah aplikasi yang bisa mendapatkan informasi dari URL yang bisa

diinputkan menggunakan dialog GUI.

DAFTAR PUSTAKA

Elliotte Rusty Harold, 2005, Java Network Programming, O’Reilly Media

Inc.

David Reilly, Michael Reilly, 2002, Java Network Programming and

Distributed Computing, Addison Wesley