BUKU PETUNJUK PRAKTIKUM PEMROGRAMAN JARINGAN
Oleh: Felix Andreas Sutanto, M.Cs
LABORATORIUM KOMPUTER PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS TEKNOLOGI INFORMASI UNIVERSITAS STIKUBANK SEMARANG
Praktikum Pemrograman Jaringan DAFTAR ISI
Universitas Stikubank – Fakultas Teknologi Informasi
2
Praktikum Pemrograman Jaringan
PRAKTIKUM 1 Pemrograman Jaringan
Tujuan Instruksional Setelah mengikuti praktikum ini, Mahasiswa diharapkan mampu untuk: 1. Memahami protocol jaringan seperti TCP, UDP dan SCTP 2. Mengenal kemampuan Java untuk pemrograman jaringan
1. Protocol Jaringan Internet Protokol (IP) adalah protokol lapisan jaringan (network layer dalam OSI Reference Model) atau protokol lapisan internetwork (internetwork layer dalam DARPA Reference Model) yang digunakan oleh protokol TCP/IP untuk melakukan pengalamatan dan routing paket data antar host-host di jaringan komputer berbasis TCP/IP. Transmission Control Protocol (TCP) adalah suatu protokol yang berada di lapisan transpor (baik itu dalam tujuh lapis model referensi OSI atau model DARPA) yang berorientasi sambungan (connection-oriented) dan dapat diandalkan (reliable). UDP, singkatan dari User Datagram Protocol, adalah salah satu protokol lapisan transpor TCP/IP yang mendukung komunikasi yang tidak andal (unreliable), tanpa koneksi (connectionless) antara host-host dalam jaringan yang menggunakan TCP/IP.
2. Pemrograman Jaringan dengan Java Pemrograman socket adalah cara untuk menggunakan komponen API (Application Programming Interface) socket untuk membuat sebuah aplikasi. Java telah menyediakan paket java.net yang berisi kelas-kelas dan interface yang menyediakan API (Application Programming Interface) level rendah (Socket, ServerSocket, DatagramSocket) dan level tinggi (URL, URLConnection). Socket merupakan fasilitas IPC (Inter Proses Communication) untuk aplikasi jaringan. Cara kerja socket dapat digambarkan seperti pada gambar 1.1 dan gambar 1.2.
Universitas Stikubank – Fakultas Teknologi Informasi
3
Praktikum Pemrograman Jaringan Gambar 1.1 Client menghubungi server
Gambar 1.2. Server menghubungi client
Sebuah socket dilengkapi dengan alamat, yang terdiri atas IP address tujuan dan nomor port. Alamat IP dapat menggunakan alamat jaringan lokal (LAN) maupun alamat internet. Jadi socket dapat digunakan untuk IPC pada LAN maupun Internet. Nomor port merupakan bilangan bulat yang digunakan untuk membedakan layanan-layanan yang berjalan pada komputer server yang sama. Pengguna layanan menggunakan nomor port ini untuk menghubungi komputer server dengan workstation (client). Dengan menggunakan nomor port yang standar, komunikasi dapat terjadi antar beberapa komputer dari jarak jauh untuk mengerjakan berbagai layanan jaringan, karena baik pengirim maupun penerima saling mengetahui ke mana data harus dikirim menggunakan nomor port tersebut. Sebagai contoh, semua sistem menggunakan nomor port 23 untuk aplikasi TELNET atau port 80 untuk aplikasi website. Oleh karena pada perancangan sistem akan dibuat suatu jenis layanan baru dengan memanfaatkan socket, maka dapat dibuat nomor port tersendiri untuk aplikasi tersebut.
3. Paket Java Network Beberapa kelas java.net yang dapat digunakan dalam menerapkan pemrograman jaringan adalah: • Socket(InetAddress address, int port) : untuk membuat sebuah stream socket dan koneksi ke suatu nomor port pada sebuah komputer yang memiliki alamat IP. • Socket(String host, int port) : untuk 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) : untuk 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 Universitas Stikubank – Fakultas Teknologi Informasi
4
Praktikum Pemrograman Jaringan • • •
• • •
• •
getInputStream() : mengembalikan objek input stream dari socket getOutputStream() : mengembalikan objek output stream ke socket ServerSocket( int port [, int backlog [, InetAddress bindAddress ]] ) : untuk membuat sebuah server dengan port tertentu, batasan jumlah antrian (backlog), dan alamat IP bindAddress. DatagramSocket(int port) : untuk menyatakan penggunaan suatu nomor port sebagai "pintu" untuk menerima koneksi dari client. DatagramSocket(int port, InetAddress laddr) : untuk membentuk koneksi dengan protokol UDP pada alamat IP lokal tertentu dan pada nomor port tertentu. DatagramSocket() : untuk 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) : untuk mengambil informasi. DatagramPacket(byte[] buf, int length, InetAddress address, int port) : 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.
4. Tugas Tuliskan struktur program java yang memanfaatkan kemampuan java dalam menangani jaringan.
Universitas Stikubank – Fakultas Teknologi Informasi
5
Praktikum Pemrograman Jaringan Hari / Tgl :
Judul Tugas
Program Studi
Universitas Stikubank – Fakultas Teknologi Informasi
TTD Dosen : Nilai :
6
Praktikum Pemrograman Jaringan
PRAKTIKUM 2 Stream
Tujuan Instruksional Setelah mengikuti praktikum ini, Mahasiswa diharapkan mampu untuk: 1. Memahami penggunaan stream. 2. Membuat program pemanfaatan stream.
1. Stream Stream digunakan untuk menangani proses I/O di Java. Input stream digunakan untuk membaca data dan output stream untuk menulis data. Kelas stream yang berbeda, seperti java.io.FileInputStream dan sun.net.TelnetOutputStream, digunakan untuk membaca dan menulis sumber data tertentu. Namun, semua output stream memiliki metode dasar yang sama untuk menulis data dan input stream menggunakan metode dasar yang sama untuk membaca data. Subclass dari OutputStream menggunakan metode untuk menulis data pada media tertentu. Misalnya, FileOutputStream menggunakan metode ini untuk menulis data ke dalam file. Metode dasar OutputStream adalah write (int b). Metode ini mengambil sebuah integer dari 0 sampai 255 sebagai sebuah argumen dan menulis byte sesuai dengan output stream. Subclass dari InputStream menggunakan metode ini untuk membaca data dari media tertentu. Misalnya, FileInputStream membaca data dari file. Sebuah TelnetInputStream membaca data dari koneksi jaringan. Sebuah ByteArrayInputStream membaca data dari sebuah array byte. Metode dasar InputStream adalah membaca noargs () method. Metode ini membaca satu byte data dari sumber input stream dan mengembalikannya sebagai int dari 0 sampai 255.
2. Reader dan Writer Subkelas yang paling penting dari Reader dan Writer adalah InputStreamReader dan kelas OutputStreamWriter. Sebuah InputStreamReader berisi input stream dasar dari yang membaca byte mentah. Ini menerjemahkan byte ini menjadi karakter Unicode sesuai dengan pengkodean tertentu. Sebuah OutputStreamWriter menerima karakter Unicode dari program yang berjalan. Kemudian menerjemahkan karakter tersebut ke dalam byte menggunakan pengkodean tertentu dan menulis byte ke output stream yang mendasarinya.
Universitas Stikubank – Fakultas Teknologi Informasi
7
Praktikum Pemrograman Jaringan Selain dua kelas tersebut, paket java.io menyediakan beberapa pembaca baku dan kelas penulis yang membaca karakter tanpa langsung membutuhkan arus input yang mendasarinya, antara lain adalah : • FileReader • FileWriter • StringReader • StringWriter • CharArrayReader • CharArrayWriter
3. Contoh Program Listing 2.1 import java.io.*; class input1 { public static void main(String[] args) throws IOException { String str; BufferedReader br; br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Masukkan Nama Anda : "); str= br.readLine(); System.out.println("Hello "+ str); } } Listing 2.2 import java.io.*; class input2 { public static void main(String[] args) throws IOException { int angka1, angka2; BufferedReader br; br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Masukkan Angka1 : ");
Universitas Stikubank – Fakultas Teknologi Informasi
8
Praktikum Pemrograman Jaringan angka1 = Integer.parseInt(br.readLine()); System.out.print("Masukkan Angka2 : "); angka2 = Integer.parseInt(br.readLine()); System.out.println("Angka1 Anda : "+ angka1); System.out.println("Angka2 Anda : "+ angka2); } }
4. Tugas Buatlah program untuk input nim, nama, nilai uts dan uas.
Universitas Stikubank – Fakultas Teknologi Informasi
9
Praktikum Pemrograman Jaringan Hari / Tgl :
Judul Tugas
Program Studi
Universitas Stikubank – Fakultas Teknologi Informasi
TTD Dosen : Nilai :
10
Praktikum Pemrograman Jaringan
PRAKTIKUM 3 Internet Address Tujuan Instruksional Setelah mengikuti praktikum ini, Mahasiswa diharapkan mampu untuk: 1. Memahami internet address clas 2. Membuat program penerapan internet address clas
1. Internet Address Kelas java.net.InetAddress adalah level tingkat tinggi dari java untuk representasi sebuah alamat IP, baik IPv4 dan IPv6. Hal ini digunakan oleh sebagian besar kelas-kelas jaringan lainnya, termasuk Socket, ServerSocket, URL, DatagramSocket, DatagramPacket, dan banyak lagi. Umumnya, itu mencakup nama host dan alamat IP. InetAddress memiliki tiga metode statis yang mengembalikan sesuai inisialisasi objek. Metode tersebut adalah: • public static InetAddress getByName(String hostName) throws UnknownHostException • public static InetAddress[] getAllByName(String hostName) throws UnknownHostException • public static InetAddress getLocalHost( ) throws UnknownHostException Ketiga metode ini dapat membuat koneksi ke server DNS lokal untuk mengisi informasi dalam objek InetAddress. Metode lainnya di kelas ini, seperti getAddress () dan getHostName (), sebagian besar bekerja dengan informasi yang diberikan oleh salah satu dari tiga metode.
2. Contoh Program import java.net.*; class myAddress { public static void main (String args[]) { try { InetAddress address = InetAddress.getLocalHost(); System.out.println(address); }
Universitas Stikubank – Fakultas Teknologi Informasi
11
Praktikum Pemrograman Jaringan catch (UnknownHostException e) { System.out.println("Could not find this computer's address."); } } } 3. Tugas Buatlah program seperti nslookup yang dapat memberikan informasi ip address dan nama host.
Universitas Stikubank – Fakultas Teknologi Informasi
12
Praktikum Pemrograman Jaringan Hari / Tgl :
Judul Tugas
Program Studi
Universitas Stikubank – Fakultas Teknologi Informasi
TTD Dosen : Nilai :
13
Praktikum Pemrograman Jaringan
PRAKTIKUM 4 URL Tujuan Instruksional Setelah mengikuti praktikum ini, Mahasiswa diharapkan mampu untuk: 1. Memahami tentang URL 2. Membuat program untuk menerapkan URL Class
1. URL Class 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"); } } } Universitas Stikubank – Fakultas Teknologi Informasi
14
Praktikum Pemrograman Jaringan 2. URL Connection 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: 1. Buatlah objek URL. 2. Panggil metode openConnection() untuk mengambil objek URLConnection dari suatu URL. 3. Mengkonfigurasi URLConnection tersebut. 4. Baca field header. 5. Dapatkan input stream dan membaca data. 6. Dapatkan output stream dan menulis data. 7. Menutup koneksi.
Contoh program akan membaca data dari URL www.unisbank.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.unisbank.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);
Universitas Stikubank – Fakultas Teknologi Informasi
15
Praktikum Pemrograman Jaringan in.close(); } } 3. Tugas Buat program untuk mendapatkan informasi dari alamat URL bebas.
Universitas Stikubank – Fakultas Teknologi Informasi
16
Praktikum Pemrograman Jaringan Hari / Tgl :
Judul Tugas
Program Studi
Universitas Stikubank – Fakultas Teknologi Informasi
TTD Dosen : Nilai :
17
Praktikum Pemrograman Jaringan
PRAKTIKUM 5 SOCKET Tujuan Instruksional Setelah mengikuti praktikum ini, Mahasiswa diharapkan mampu untuk: 1. Memahami penggunaan port. 2. Memahami penggunaan socket untuk server dan client.
1. Port Nomor-nomor di bawah angka 1024 merupakan port yang umum digunakan dan ditetapkan oleh IANA (Internet Assigned Number Authority). Tabel 5.1 berikut ini menyebutkan beberapa port TCP yang telah umum digunakan. Tabel 5.1. Contoh Well Known Port Nomor port TCP 20 21 23 25 53 67 68 80 110 137 138 139 161 445
Keterangan File Transfer Protocol/FTP (digunakan untuk saluran data) File Transfer Protocol/FTP (digunakan untuk saluran kontrol) Telnet SMTP yang digunakan untuk mengirim e-mail Domain Name System (DNS) Name Query BOOTP client (Dynamic Host Configuration Protocol [DHCP]) BOOTP server (DHCP) Hypertext Transfer Protocol yang digunakan untuk World Wide Web. Post Office Protocol 3/POP3 untuk menerima e-mail. NetBIOS Name Service NetBIOS Datagram Service NetBIOS over TCP session service Simple Network Management Protocol (SNMP) Server Message Block (SMB)
2. Socket Untuk Client Kelas java.net.Socket adalah kelas fundamental Java untuk melakukan operasi TCP client-side. import java.net.*; import java.io.*; public class myport {
Universitas Stikubank – Fakultas Teknologi Informasi
18
Praktikum Pemrograman Jaringan public static void main(String[] args) { Socket theSocket; String host = "localhost"; for (int i = 0; i <=100; i++) { try { theSocket = new Socket(host, i); System.out.println("There is a server on port " + i + " of " + host); } catch (UnknownHostException e) { System.err.println(e); break; } catch (IOException e) {} } } }
3. Socket untuk Server Kelas ServerSocket berisi semua yang diperlukan untuk menulis server di Java. Ini memiliki konstruktor yang membuat objek baru ServerSocket, metode yang mendengarkan koneksi pada port tertentu, metode yang mengkonfigurasi opsi server berbagai soket, dan bermacam-macam metode biasa seperti toString (). Dalam pemrograman java siklus hidup dasar dari suatu program server adalah: 1. Sebuah ServerSocket yang baru dibuat pada sebuah port tertentu menggunakan konstruktor ServerSocket (). 2. The ServerSocket mendengarkan upaya koneksi masuk pada port menggunakan metode accept(). 3. Tergantung pada jenis server, baik getInputStream Socket's (), getOutputStream (), atau keduanya dipanggil untuk mendapatkan input dan output stream yang berkomunikasi dengan klien. 4. Server dan klien berinteraksi sesuai dengan yang telah disepakati protokol sampai saatnya untuk menutup koneksi.
Universitas Stikubank – Fakultas Teknologi Informasi
19
Praktikum Pemrograman Jaringan 5. Server, klien, atau keduanya menutup koneksi. 6. Server kembali ke langkah 2 dan menunggu sambungan berikutnya. import java.net.*; import java.io.*; public class serverport { public static void main(String[] args) { ServerSocket theServer; for (int i = 1024; i <= 65535; i++) { try { theServer = new ServerSocket(i); theServer.close(); } catch (IOException e) { System.out.println("There is a server on port " + i + "."); } } } } 4. Tugas Buat program untuk mendeteksi port yang aktif pada server mulai dari port 500 sampai 1000.
Universitas Stikubank – Fakultas Teknologi Informasi
20
Praktikum Pemrograman Jaringan Hari / Tgl :
Judul Tugas
Program Studi
Universitas Stikubank – Fakultas Teknologi Informasi
TTD Dosen : Nilai :
21
Praktikum Pemrograman Jaringan
PRAKTIKUM 6 TCP Socket Tujuan Instruksional Setelah mengikuti praktikum ini, Mahasiswa diharapkan mampu untuk: 1. Memahami socket TCP 2. Membuat implementasi program.
1. Socket TCP Transmission Control Protocol (TCP) adalah suatu protokol yang berada di lapisan transpor yang berorientasi sambungan (connection-oriented) dan dapat diandalkan (reliable). TCP memiliki karakteristik sebagai berikut: 1. Berorientasi sambungan (connection-oriented): Sebelum data dapat ditransmisikan antara dua host, dua proses yang berjalan pada lapisan aplikasi harus melakukan negosiasi untuk membuat sesi koneksi terlebih dahulu. Koneksi TCP ditutup dengan menggunakan proses terminasi koneksi TCP (TCP connection termination). 2. Full-duplex: Untuk setiap host TCP, koneksi yang terjadi antara dua host terdiri atas dua buah jalur, yakni jalur keluar dan jalur masuk. Dengan menggunakan teknologi lapisan yang lebih rendah yang mendukung full-duplex, maka data pun dapat secara simultan diterima dan dikirim. Header TCP berisi nomor urut (TCP sequence number) dari data yang ditransmisikan dan sebuah acknowledgment dari data yang masuk. 3. Dapat diandalkan (reliable): Data yang dikirimkan ke sebuah koneksi TCP akan diurutkan dengan sebuah nomor urut paket dan akan mengharapkan paket positive acknowledgment dari penerima. Jika tidak ada paket Acknowledgment dari penerima, maka segmen TCP (protocol data unit dalam protokol TCP) akan ditransmisikan ulang. Pada pihak penerima, segmen-segmen duplikat akan diabaikan dan segmen-segmen yang datang tidak sesuai dengan urutannya akan diletakkan di belakang untuk mengurutkan segmen-segmen TCP. Untuk menjamin integritas setiap segmen TCP, TCP mengimplementasikan penghitungan TCP Checksum. 4. Byte stream: TCP melihat data yang dikirimkan dan diterima melalui dua jalur masuk dan jalur keluar TCP sebagai sebuah byte stream yang berdekatan (kontigu). Nomor urut TCP dan nomor acknowlegment dalam setiap header TCP didefinisikan juga dalam bentuk byte. Meski demikian, TCP tidak mengetahui batasan pesan-pesan di dalam byte stream TCP tersebut. Untuk melakukannya, hal ini diserahkan kepada protokol lapisan aplikasi (dalam DARPA Reference Model), yang harus menerjemahkan byte stream TCP ke dalam "bahasa" yang ia pahami.
Universitas Stikubank – Fakultas Teknologi Informasi
22
Praktikum Pemrograman Jaringan 5. Memiliki layanan flow control: Untuk mencegah data terlalu banyak dikirimkan pada satu waktu, yang akhirnya membuat "macet" jaringan internetwork IP, TCP mengimplementasikan layanan flow control yang dimiliki oleh pihak pengirim yang secara terus menerus memantau dan membatasi jumlah data yang dikirimkan pada satu waktu. Untuk mencegah pihak penerima untuk memperoleh data yang tidak dapat disangganya (buffer), TCP juga mengimplementasikan flow control dalam pihak penerima, yang mengindikasikan jumlah buffer yang masih tersedia dalam pihak penerima. 6. Mengirimkan paket secara "one-to-one": hal ini karena memang TCP harus membuat sebuah sirkuit logis antara dua buah protokol lapisan aplikasi agar saling dapat berkomunikasi. TCP tidak menyediakan layanan pengiriman data secara one-to-many.
2. Program Server 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()));
Universitas Stikubank – Fakultas Teknologi Informasi
23
Praktikum Pemrograman Jaringan 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("unisbank") == 0) { os.writeBytes("Welcome To Unisbank."); } 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(); } } }
Universitas Stikubank – Fakultas Teknologi Informasi
24
Praktikum Pemrograman Jaringan 3. Program Client 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(System.in)); 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); }
Universitas Stikubank – Fakultas Teknologi Informasi
25
Praktikum Pemrograman Jaringan 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); } } }
4. Tugas Buatlah program untuk memasukkan nama anda ke server dari suatu client.
Universitas Stikubank – Fakultas Teknologi Informasi
26
Praktikum Pemrograman Jaringan Hari / Tgl :
Judul Tugas
Program Studi
Universitas Stikubank – Fakultas Teknologi Informasi
TTD Dosen : Nilai :
27
Praktikum Pemrograman Jaringan
PRAKTIKUM 7 UDP Socket Tujuan Instruksional Setelah mengikuti praktikum ini, Mahasiswa diharapkan mampu untuk: 1. Memahami UDP Socket. 2. Mengimplementasikan UDP socket pada server dan client.
1. UDP Socket User Datagram Protocol (UDP), adalah salah satu protokol lapisan transpor TCP/IP yang mendukung komunikasi yang tidak andal (unreliable), tanpa koneksi (connectionless) antara host-host dalam jaringan yang menggunakan TCP/IP. UDP memiliki karakteristik-karakteristik berikut: 1. Connectionless (tanpa koneksi): Pesan-pesan UDP akan dikirimkan tanpa harus dilakukan proses negosiasi koneksi antara dua host yang hendak berukar informasi. 2. Unreliable (tidak andal): Pesan-pesan UDP akan dikirimkan sebagai datagram tanpa adanya nomor urut atau pesan acknowledgment. Protokol lapisan aplikasi yang berjalan di atas UDP harus melakukan pemulihan terhadap pesan-pesan yang hilang selama transmisi. Umumnya, protokol lapisan aplikasi yang berjalan di atas UDP mengimplementasikan layanan keandalan mereka masing-masing, atau mengirim pesan secara periodik atau dengan menggunakan waktu yang telah didefinisikan. 3. UDP menyediakan mekanisme untuk mengirim pesan-pesan ke sebuah protokol lapisan aplikasi atau proses tertentu di dalam sebuah host dalam jaringan yang menggunakan TCP/IP. Header UDP berisi field Source Process Identification dan Destination Process Identification. 4. UDP menyediakan penghitungan checksum berukuran 16-bit terhadap keseluruhan pesan UDP.
2. Program Server import java.net.*; import java.io.*; class ServerDatagram { public static DatagramSocket ds; public static int clientport=800,serverport=900; public static void main (String args[]) throws Exception { byte buffer[]= new byte[1024]; ds= new DatagramSocket (serverport); Universitas Stikubank – Fakultas Teknologi Informasi
28
Praktikum Pemrograman Jaringan BufferedReader dis= new BufferedReader ( new InputStreamReader (System.in)); System.out.println ("Server menunggu input"); InetAddress i=InetAddress.getByName ("Localhost"); while (true) { System.out.print("Inputan Server: "); String str=dis.readLine(); if ((str==null || str.equals ("end")) ) break; buffer=str.getBytes(); ds.send ( new DatagramPacket (buffer,str.length(), i, clientport)); } } }
3. Program Client import java.net.*; import java.io.*; class ClientDatagram { public static DatagramSocket d; public static byte buffer[] = new byte [1024]; public static int clientport=800,serverport =900; public static void main (String args[]) throws Exception { d= new DatagramSocket (clientport); System.out.println ("Client sedang menunggu server mengirimkan data "); System.out.println ("tekan Ctrl + C untuk mengakhiri "); while (true) { DatagramPacket p = new DatagramPacket (buffer, buffer.length); d.receive (p); String ps= new String (p.getData(),0,p.getLength()); System.out.println("From Server: "+ ps); } } }
4. Tugas Modifikasilah program diatas agar menjadi program yang dapat digunakan untuk saling mengirim pesan pada beberapa komputer.
Universitas Stikubank – Fakultas Teknologi Informasi
29
Praktikum Pemrograman Jaringan Hari / Tgl :
Judul Tugas
Program Studi
Universitas Stikubank – Fakultas Teknologi Informasi
TTD Dosen : Nilai :
30
Praktikum Pemrograman Jaringan
PRAKTIKUM 8 Komunikasi Antar Obyek Tujuan Instruksional Setelah mengikuti praktikum ini, Mahasiswa diharapkan mampu untuk: 1. Memahami cara komunikasi obyek melalui stream. 2. Memahami cara komunikasi obyek melalui socket.
1. Komunikasi Obyek Melalui Stream Pada pemrograman socket, pada umumnya data yang dikirimkan berupa data stream. Stream memungkinkan juga untuk mengirimkan obyek melalui suatu mekanisme yang disebut serialisasi objek. Serialisasi objek (Object Serialization) adalah suatu teknik yang memungkinkan program untuk menyimpan status objek ke dalam sebuah file, kemudian dibaca kembali dari file ke memori atau dikirimkan melalui jaringan. Staff.java import java.io.*; public class Staff implements Serializable{ String nama; String divisi; int umur; public Staff(String nama, String divisi, int umur) { this.nama=nama; this.divisi=divisi; this.umur= umur; } public void print() { System.out.println("Data Staff: "); System.out.println("Nama : " + nama); System.out.println("Divisi : " + divisi); System.out.println("Umur : "+ umur); } }
Universitas Stikubank – Fakultas Teknologi Informasi
31
Praktikum Pemrograman Jaringan ObjectClient.java import java.net.*; import java.io.*; public class ObjectClient{ private static int SRV_PORT = 5000; private static ObjectOutputStream os=null; public static void main(String argv[]) throws Exception{ try{ Socket soketClient= new Socket("127.0.0.1", SRV_PORT); os= new ObjectOutputStream(soketClient.getOutputStream()); Staff pegawai= new Staff("Steve","IT",24); os.writeObject(pegawai); System.out.println("Client mengirim data pegawai:"); pegawai.print(); } catch(Exception e){ e.printStackTrace(); } } } ObjectServer.java import java.net.*; import java.io.*; public class ObjectServer { private static int SRV_PORT=5000; private static ObjectInputStream is=null; public static void main(String argv[]) throws Exception{ ServerSocket soketServer= new ServerSocket(SRV_PORT); Socket soketClient= soketServer.accept(); is= new ObjectInputStream(soketClient.getInputStream()); Staff pegawai= (Staff) is.readObject(); System.out.println("Server menerima data Pegawai"); pegawai.print(); } }
Universitas Stikubank – Fakultas Teknologi Informasi
32
Praktikum Pemrograman Jaringan 2. Komunikasi Objek Melalui Stream Suatu obyek dari kelas yang menerapkan interface serializable atau externalizable dapat diserialisasikan melalui socket karena ServerSocket dan Socket juga mendukung stream. Dengan demikian suatu objek dapat juga dikirimkan dan diterima melalui mekanisme socket. PegawaiEx.java import java.io.*; public class PegawaiEx implements Externalizable { private String nama; private int umur; private int gaji; public PegawaiEx() { } public PegawaiEx(String nama, int umur, int gaji) { this.nama = nama; this.umur = umur; this.gaji = gaji; } public void writeExternal(ObjectOutput objout) throws IOException { objout.writeObject("Nama : " + this.nama); objout.writeInt(this.umur); objout.writeInt(this.gaji); } public void readExternal(ObjectInput objin) throws IOException, ClassNotFoundException { this.nama = (String) objin.readObject(); this.umur = objin.readInt(); this.gaji = objin.readInt(); } public String toString()
Universitas Stikubank – Fakultas Teknologi Informasi
33
Praktikum Pemrograman Jaringan { return "Data untuk " + this.nama + "\n" + this.umur + "\n" + this.gaji; } } PegawaiClient.java import java.io.*; import java.net.*; public class PegawaiClient { public static void main(String[] args) { Socket soc = null; PegawaiEx pegawaiInput = null; try { soc = new Socket("localhost", 4545); ObjectInput ois = new ObjectInputStream(soc.getInputStream()); ObjectOutput ous = new ObjectOutputStream(soc.getOutputStream()); pegawaiInput = new PegawaiEx("Client", 10,150); ous.writeObject(pegawaiInput); ous.flush(); String s = (String) ois.readObject(); System.out.println(s); ous.close(); ois.close(); } catch (Exception e) { e.printStackTrace(); System.out.println(e.getMessage()); } } }
Universitas Stikubank – Fakultas Teknologi Informasi
34
Praktikum Pemrograman Jaringan PegawaiServer.java import java.io.*; import java.net.*; public class PegawaiServer { public static void main(String[] args) { ServerSocket ser = null; Socket soc = null; PegawaiEx pegawaiInput = null; try { ser = new ServerSocket(4545); System.out.println("Server siap"); soc = ser.accept(); ObjectInput ois = new ObjectInputStream(soc.getInputStream()); ObjectOutput ous = new ObjectOutputStream(soc.getOutputStream()); pegawaiInput = (PegawaiEx) ois.readObject(); System.out.println("Hasil Kiriman Client"); System.out.println(pegawaiInput); String res = new String ("Data Pegawai telah diterima"); ous.writeObject(res); ous.flush(); ous.close(); ois.close(); } catch (Exception e) { e.printStackTrace(); System.out.println(e.getMessage()); } } }
Universitas Stikubank – Fakultas Teknologi Informasi
35
Praktikum Pemrograman Jaringan Hari / Tgl :
Judul Tugas
Program Studi
Universitas Stikubank – Fakultas Teknologi Informasi
TTD Dosen : Nilai :
36
Praktikum Pemrograman Jaringan
PRAKTIKUM 9 Multicast Socket Tujuan Instruksional Setelah mengikuti praktikum ini, Mahasiswa diharapkan mampu untuk: 1. Memahami tentang multicast Socket. 2. Mampu membuat program sederhana.
1. Multicast Socket Multicasting lebih luas daripada unicast, multicasting mengirimkan data dari satu host ke host yang berbeda, namun tidak untuk semua orang, data hanya pergi ke klien yang telah menyatakan bergabung dengan kelompok multicast tertentu. Di Java, multicast data menggunakan kelas java.net.MulticastSocket, sebuah subclass dari java.net.DatagramSocket. Perilaku MulticastSocket adalah sangat mirip dengan DatagramSocket's. Anda memasukkan data Anda pada objek DatagramPacket yang Anda kirim dan terima dengan MulticastSocket. Konstruktor ini melemparkan SocketException jika Socket tidak dapat dibuat. Sebagai contoh: try { MulticastSocket ms = new MulticastSocket( ); // send some datagrams... } catch (SocketException se) { System.err.println(se); }
2. Contoh Program MulticastSniffer.java import java.net.*; import java.io.*; public class MulticastSniffer { public static void main(String[] args) { InetAddress group = null; int port = 0; try {
Universitas Stikubank – Fakultas Teknologi Informasi
37
Praktikum Pemrograman Jaringan group = InetAddress.getByName(args[0]); port = Integer.parseInt(args[1]); } catch (Exception ex) { 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) {} } } } }
MulticastSender.java import java.net.*; import java.io.*;
Universitas Stikubank – Fakultas Teknologi Informasi
38
Praktikum Pemrograman Jaringan public class MulticastSender { public static void main(String[] args) { InetAddress ia = null; int port = 0; byte ttl = (byte) 1; 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); } } } 3. Tugas Tentukan aplikasi apa saja yang memerlukan multicast.
Universitas Stikubank – Fakultas Teknologi Informasi
39
Praktikum Pemrograman Jaringan Hari / Tgl :
Judul Tugas
Program Studi
Universitas Stikubank – Fakultas Teknologi Informasi
TTD Dosen : Nilai :
40
Praktikum Pemrograman Jaringan
PRAKTIKUM 10 Aplikasi Terapan Tujuan Instruksional Setelah mengikuti praktikum ini, Mahasiswa diharapkan mampu untuk: 1. Memahami proses pengiriman email 2. Membuat program untuk mengirim email
1. Proses Pengiriman Email Aplikasi email sebenarnya adalah bentuk dari pelayanan SMTP (Simple Mail Transfer Protocol). SMTP adalah suatu protokol pesan untuk layanan pengiriman pesan email. Pengiriman pesan email bisa dilakukan tanpa harus memiliki account email pada SMTP server. Untuk mengirimkan email, aplikasi yang akan dibuat harus menghubungi mail server yang akan memforward pesan ke mail server yang mengelola account email tujuan. Jadi hal pertama yang harus diketahui adalah alamat IP/nama mail server dan port yang digunakannya. Setelah mengetahui kedua hal tersebut, perlu juga diketahui protokol pesannya. Secara umum setiap pesan memiliki alamat email tujuan, email pengirim, email pengirim yang akan tampil di pesan, judul pesan dan isi pesan. Pengiriman email bisa menggunakan cara sederhana melalui program Telnet. Telnet memungkinkan pengguna untuk mengakses smtp/mail server melalui port 25 untuk mengirim email atau port 110 untuk mengakses Pop3 mail. Perintah yang bisa digunakan adalah sebagai berikut: telnet namaserver port Proses pengiriman email dapat dilakukan melalui langkah-langkah sebagai berikut: 1. Melakukan koneksi ke mail server melalui port 25 2. Menguji respon server (optional) 3. Memberitahukan asal email 4. Memberitahukan tujuan email 5. Menuliskan data atau isi email 6. Menutup koneksi Proses pengiriman dilakukan dengan memberikan perintah-perintah sebagai berikut: • Mail from : <email_pengirim> untuk menunjukkan siapa pengirim email. • Rcpt to: <email_tujuan> untuk menunjukkan siapa penerima email. • Data untuk menuliskan pesan email. Data dapat berisi atribut subject, from dan to serta isi pesan. Isi data diakhiri dengan tanda titik( “.”). • Quit untuk menutup koneksi dengan server mail.
Universitas Stikubank – Fakultas Teknologi Informasi
41
Praktikum Pemrograman Jaringan
Gambar 10.1 Contoh proses
2. Membuat Program Bahasa Java telah menyediakan paket untuk mengakses socket melalui paket java.net. Adapun kelas yang akan digunakan untuk mengakses socket server adalah kelas Socket. Format penggunaannya adalah sebagai berikut: Socket(“nama_server/ip_address”, port) Untuk mengirimkan perintah ke server saat koneksi terjadi digunakan bantuan paket java.io seperti DataOutputStream untuk menginput perintah ke server dan BufferedReader untuk mendapatkan respon dari server. import java.net.*; import java.io.*; public class emailku { public static void main(String[] argc) { Socket s1; DataOutputStream p1=null; BufferedReader d1=null; String recvreply; try
Universitas Stikubank – Fakultas Teknologi Informasi
42
Praktikum Pemrograman Jaringan { s1=new Socket("mail.sertifikasi.web.id",25); p1=new DataOutputStream(s1.getOutputStream()); d1=new BufferedReader(new InputStreamReader(s1.getInputStream())); recvreply=d1.readLine(); System.out.println("Server Response : " + recvreply); p1.writeBytes("HELO mail.sertifikasi.web.id\r\n"); recvreply=d1.readLine(); System.out.println("Server Response : " + recvreply); p1.writeBytes("MAIL FROM:
\r\n"); recvreply=d1.readLine(); System.out.println("Server Response : " + recvreply); p1.writeBytes("RCPT TO:\r\n"); recvreply=d1.readLine(); System.out.println("Server Response : " + recvreply); p1.writeBytes("DATA\r\n"); recvreply=d1.readLine(); System.out.println("Server Response : " + recvreply); p1.writeBytes("Subject:Perkenalan\r\n"); p1.writeBytes("From:\r\n"); p1.writeBytes("To:\r\n"); p1.writeBytes("\r\n"); p1.writeBytes("Hello,\r\n"); p1.writeBytes("Saya hanya ingin memperkenalkan diri.\r\n"); p1.writeBytes("Silahkan kunjungi website kami di:\r\n"); p1.writeBytes("www.sertifikasi.web.id\r\n"); p1.writeBytes("\r\n"); p1.writeBytes("Felix\r\n"); p1.writeBytes("============\r\n"); p1.writeBytes(".\r\n"); recvreply=d1.readLine(); System.out.println("Server Response : " + recvreply); p1.writeBytes("QUIT\r\n");
Universitas Stikubank – Fakultas Teknologi Informasi
43
Praktikum Pemrograman Jaringan recvreply=d1.readLine(); System.out.println("Server Response : " + recvreply); s1.close(); System.out.println("Closed Connection with Server"); } catch(IOException e) { System.out.println("Error in Connecting to Port"); } } }
3. Tugas Modifikasi program diatas supaya dapat mengirimkan email secara flexibel. (Semua input diberikan oleh pemakai program).
Universitas Stikubank – Fakultas Teknologi Informasi
44
Praktikum Pemrograman Jaringan Hari / Tgl :
Judul Tugas
Program Studi
Universitas Stikubank – Fakultas Teknologi Informasi
TTD Dosen : Nilai :
45
Praktikum Pemrograman Jaringan DAFTAR PUSTAKA
Elliotte Rusty Harold, 2004, Java Network Programming, O'Reilly. Jan Graba, 2007, An Introduction to Network Programming with Java, Springer Science+Business Media, LLC. David Reilly, Michael Reilly, 2002, Java Network Programming and Distributed Computing, Addison Wesley
Universitas Stikubank – Fakultas Teknologi Informasi
46