Praktikum ini membahas tentang Internet Address class dalam Java untuk merepresentasikan alamat IP versi 4 dan 6. Kelas InetAddress digunakan oleh kelas jaringan lainnya untuk menangani nama host dan alamat IP. Ada beberapa metode statis untuk mengambil objek InetAddress seperti getByName, getAllByName, dan getLocalHost. Latihan membuat program menggunakan kelas ini untuk koneksi ke server.
1. 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.
2. Praktikum Pemrograman Jaringan
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
3. Praktikum Pemrograman Jaringan
3
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.
Latihan 1:
/*
package udpserver;
*/
import java.net.*;
import java.io.*;
public class Main {
public static void main(String[] args) {
try{
System.out.println ("UDP Server demo");
System.out.println ("Binding ke port 8088");
DatagramSocket socket = new DatagramSocket(8088);
System.out.println ("Bound local port: " + socket.getLocalPort());
System.out.println ("Menunggu packet datang...");
DatagramPacket packet = new DatagramPacket( new byte[256], 256 );
socket.receive(packet);
System.out.println ("Packet diterima!");
InetAddress remote_addr = packet.getAddress();
System.out.println("IP Address pengirim : " +
remote_addr.getHostAddress() );
System.out.println ("Port pengirim: " + packet.getPort());
ByteArrayInputStream bin = new
ByteArrayInputStream(packet.getData());
for (int i=0; i < packet.getLength(); i++){
int data = bin.read();
if (data == -1)
break;
else
4. Praktikum Pemrograman Jaringan
4
System.out.print ((char)data) ;
}
socket.close();
}
catch(Exception ex){
System.out.println("Error: " + ex.getMessage());
}
}
}
Latihan 2:
/*
package udpclient;
*/
import java.net.*;
import java.io.*;
public class Main {
public static void main(String[] args) {
try{
String hostname = "akur";
System.out.println ("UDP client demo");
System.out.println ("Binding ke local port");
DatagramSocket socket = new DatagramSocket();
System.out.println ("Bound local port: " + socket.getLocalPort());
ByteArrayOutputStream stream = new ByteArrayOutputStream();
PrintStream pOut = new PrintStream(stream);
pOut.print ("Apa kabar!");
byte[] barray = stream.toByteArray();
DatagramPacket packet = new DatagramPacket(barray, barray.length );
System.out.println ("Target hostname: " + hostname );
InetAddress remote_addr = InetAddress.getByName(hostname);
System.out.println ("IP Address Hostname: " +
remote_addr.getHostAddress());
packet.setAddress (remote_addr);
packet.setPort (8088);
socket.send(packet);
System.out.println ("Packet telah terkirim!");
}
catch(Exception ex){
System.out.println("Error: " + ex.getMessage());
}
}
}
4. Tugas
Tuliskan struktur program java yang memanfaatkan kemampuan java dalam menangani jaringan.
5. 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.
6. 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
Latihan 3
/*
package inputdemo;
*/
import java.io.*;
public class Main {
public static void main(String[] args) {
// TODO code application logic here
String inputFile = "c:tempmydata.txt";
try{
InputStream input = new FileInputStream(inputFile);
/* pembacaan dengan per byte */
int byteData = input.read();
while(byteData !=-1){
String strData = new String(new
byte[]{(byte)byteData});
System.out.println("Data: " + strData);
System.out.println("Data byte: " + byteData);
byteData = input.read();
}
/* pembacaan dengan per 20 byte */
/*
byte[] myData = new byte[20];
int data = input.read(myData);
while(data !=-1){
String strData = new String(myData);
System.out.println("Data: " + strData);
System.out.println("Panjang data terbaca: " + data
);
data = input.read(myData);
}
*/
input.close();
}catch(IOException e){
System.err.println(e.getMessage());
}
7. Praktikum Pemrograman Jaringan
}
}
Latihan 4:
/*
package outputdemo;
*/
import java.io.*;
public class Main {
public static void main(String[] args) {
// TODO code application logic here
String source = "c:tempmydata.txt";
String dest = "c:tempmydata_out.txt";
try{
InputStream input = new FileInputStream(source);
byte[] byData = new byte[10];
int data = input.read(byData);
OutputStream output = new FileOutputStream(dest);
while(data !=-1){
String strData = new String(byData);
System.out.println("Read data: " + strData );
System.out.println("Panjang pembacaan data: " +
data );
System.out.print("Tulis ke file .....");
output.write(data);
System.out.println("done.");
data = input.read(byData);
}
input.close();
output.close();
System.out.println("Done.");
}catch(IOException e){
System.err.println(e.getMessage());
}
}
}
Latihan 5:
/*
package simpleconnectfilter;
*/
import java.io.*;
public class SimpleConnectFilter {
public static void main(String[] args) {
// TODO code application logic here
String file = "c:temptest_data.txt";
try
{
FileOutputStream fout = new FileOutputStream(file);
PrintStream pout = new PrintStream (fout);
8. Praktikum Pemrograman Jaringan
pout.println ("Selamat datang");
pout.println ("Di pemrograman jaringan - java");
System.out.println("Done");
} catch (IOException ex)
{
System.err.println(ex.getMessage());
}
}
}
Latihan 6:
import java.io.*;
class input 1
{
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); }
}
Latihan 7:
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 : ");
9. 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.
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.
Latihan 8:
/*
package javaapacheapp;
*/
import java.io.*;
import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.impl.client.*;
import org.apache.http.client.methods.*;
public class JavaApacheApp {
public static void main(String[] args) throws IOException {
// TODO code application logic here
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new
HttpGet("http://www.aguskurniawan.net/book/testhalaman.html");
HttpResponse response = httpclient.execute(httpget);
11. Praktikum Pemrograman Jaringan
HttpEntity entity = response.getEntity();
if (entity != null)
{
BufferedReader rd = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
String line = "";
while ((line = rd.readLine()) != null)
{
System.out.println(line);
}
rd.close();
}
}
}
Latihan 9:
/*
package javaapachepostapp;
*/
import java.io.*;
import java.util.*;
import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.client.entity.*;
import org.apache.http.impl.client.*;
import org.apache.http.client.methods.*;
import org.apache.http.message.*;
public class JavaApachePostApp {
public static void main(String[] args) throws IOException {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new
HttpPost("http://www.aguskurniawan.net/book/default.aspx");
List <NameValuePair> nvps = new ArrayList
<NameValuePair>();
nvps.add(new BasicNameValuePair("__VIEWSTATE", ""));
nvps.add(new BasicNameValuePair("__EVENTVALIDATION", ""));
nvps.add(new BasicNameValuePair("txtName",
"Agus+Kurniawan"));
nvps.add(new BasicNameValuePair("btnSubmit", "Submit"));
httppost.setEntity(new UrlEncodedFormEntity(nvps));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
if (entity != null)
{
BufferedReader rd = new BufferedReader(new
InputStreamReader(
response.getEntity().getContent()));
String line = "";
while ((line = rd.readLine()) != null)
{
System.out.println(line);
}
rd.close();
}
}
}
12. Praktikum Pemrograman Jaringan
Latihan 10:
/*
package javahttp;
*/
import java.io.*;
import java.net.*;
/**
*
* @author Agus Kurniawan
*/
public class JavaHttp {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
try
{
System.out.println("Connecting...");
URL url = new
URL("http://aguskurniawan.net/book/testhalaman.html");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
System.out.println("Server Respon:");
System.out.println(" Response Code: " + con.getResponseCode());
BufferedReader in = new BufferedReader(
new InputStreamReader(
con.getInputStream()));
String line;
System.out.println("Data Respon:");
while ((line = in.readLine()) != null)
System.out.println(line);
in.close();
con.disconnect();
} catch (UnknownHostException e) {
System.err.println(e.getMessage());
System.exit(1);
} catch (IOException e) {
System.err.println(e.getMessage());
System.exit(1);
}
}
}
Latihan 11:
/*
package javahttppost;
*/
import java.io.*;
import java.net.*;
public class JavaHttpPost {
public static void main(String[] args) {
// TODO code application logic here
13. Praktikum Pemrograman Jaringan
try {
String data =
"__VIEWSTATE=%2FwEPDwUKMTU5MTA2ODYwOWRknm6e9vAwBiwK6VHieAu%2BMezs%2BjU%3D&__EVE
NTVALIDATION=%2FwEWAwLo06OhBQLEhISFCwLCi9reA1smDvPQScCnGsHgE6G0j0tlx4UV&txtName
=Agus+Kurniawan&btnSubmit=Submit";
System.out.println("Connecting...");
URL url = new URL("http://aguskurniawan.net/book/default.aspx");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
System.out.println("Connected");
System.out.println("Kirim data HTTP Post");
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
con.setRequestProperty("Content-Length", "" +
Integer.toString(data.getBytes().length));
con.setRequestProperty("Content-Language", "en-US");
con.setUseCaches (false);
con.setDoInput(true);
con.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(
con.getOutputStream());
out.write(data);
out.flush();
out.close();
System.out.println("Data Respon:");
BufferedReader in = new BufferedReader(
new InputStreamReader(
con.getInputStream()));
String line;
while ((line = in.readLine()) != null)
System.out.println(line);
out.close();
in.close();
con.disconnect();
} catch (UnknownHostException e) {
System.err.println(e.getMessage());
System.exit(1);
} catch (IOException e) {
System.err.println(e.getMessage());
System.exit(1);
}
}
}
Latihan 12:
/*
package simplehttp;
*/
import java.io.*;
import java.net.*;
public class SimpleHttp {
public static void main(String[] args) throws IOException {
// TODO code application logic here
14. Praktikum Pemrograman Jaringan
try {
String host = "aguskurniawan.net";
int port = 80;
Socket socket = new Socket(host,port);
System.out.println("Kirim header");
// kirim header
String path = "/book/testhalaman.html";
BufferedWriter wr = new BufferedWriter(new
OutputStreamWriter(socket.getOutputStream(), "UTF8"));
wr.write("GET "+ path +" HTTP/1.0rn");
wr.write("Host: "+ host +"rn");
wr.write("rn");
wr.flush();
// Menunggu response
System.out.println("Hasil Response:");
BufferedReader rd = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
System.out.println(line);
}
wr.close();
rd.close();
socket.close();
} catch (UnknownHostException e) {
System.err.println(e.getMessage());
System.exit(1);
} catch (IOException e) {
System.err.println(e.getMessage());
System.exit(1);
}
}
}
Latihan 13:
/*
package simplehttpauthdemo;
*/
import java.io.*;
import java.net.*;
import org.apache.commons.codec.binary.*;
public class SimpleHttpAuthDemo {
public static void main(String[] args) {
// TODO code application logic here
try
{
System.out.println("Connecting...");
URL url = new URL("http://localhost:8022/test.html");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
// basic authentication
String userpassword = "User1:!pass@word1";
byte[] bytesUserName =Base64.encodeBase64(userpassword.getBytes());
String encodedAuthorization = new String(bytesUserName);
con.setRequestProperty("Authorization", "Basic "+
encodedAuthorization);
15. Praktikum Pemrograman Jaringan
System.out.println("Server Respon:");
System.out.println(" Response Code: " + con.getResponseCode());
BufferedReader in = new BufferedReader(
new InputStreamReader(
con.getInputStream()));
String line;
System.out.println("Data Respon:");
while ((line = in.readLine()) != null)
System.out.println(line);
in.close();
con.disconnect();
} catch (UnknownHostException e) {
System.err.println(e.getMessage());
System.exit(1);
} catch (IOException e) {
System.err.println(e.getMessage());
System.exit(1);
}
}
}
Latihan 14:
/*
package simplehttppost;
*/
import java.io.*;
import java.net.*;
public class SimpleHttpPost {
public static void main(String[] args) {
// TODO code application logic here
try {
// Kontruksi data
String data =
"__VIEWSTATE=%2FwEPDwUKMTU5MTA2ODYwOWRknm6e9vAwBiwK6VHieAu%2BMezs%2BjU%3D&__EVE
NTVALIDATION=%2FwEWAwLo06OhBQLEhISFCwLCi9reA1smDvPQScCnGsHgE6G0j0tlx4UV&txtName
=Agus+Kurniawan&btnSubmit=Submit";
// Initialisasi socket
String host = "aguskurniawan.net";
int port = 80;
Socket socket = new Socket(host,port);
// Kirim header
System.out.println("Kirim header");
String path = "/book/default.aspx";
BufferedWriter wr = new BufferedWriter(new
OutputStreamWriter(socket.getOutputStream(), "UTF8"));
wr.write("POST "+ path +" HTTP/1.1rn");
wr.write("Host: "+ host +"rn");
wr.write("Content-Length: "+ data.length() +"rn");
wr.write("Content-Type: application/x-www-form-urlencodedrn");
wr.write("rn");
// kirim data
System.out.println("Kirim data");
wr.write(data);
wr.flush();
16. Praktikum Pemrograman Jaringan
// Menunggu response
System.out.println("Hasil Response:");
BufferedReader rd = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
System.out.println(line);
}
wr.close();
rd.close();
socket.close();
} catch (UnknownHostException e) {
System.err.println(e.getMessage());
System.exit(1);
} catch (IOException e) {
System.err.println(e.getMessage());
System.exit(1);
}
}
}
Latihan 15:
import java.net.*;
class myAddress
{
public static void main (String args[])
{
try
{
InetAddress address = InetAddress.getLocalHost();
System.out.println(address);
}
17. 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.