Anda di halaman 1dari 49

Network Programming

Pemrograman Lanjut
Oleh
Tita Karlita
Menu
z Pengantar Jaringan Komputer TCP/IP
z Pemrograman Client/Server
z Dasar networking di Java
z Socket: class Socket dan ServerSocket
z Mengimplementasikan network client.
z Mengimplementasikan a network server.
z Datagram: class DatagramPacket dan
DatagramSocket
z URL and URLConnection class
z Loading a Web page and any other resource with a URL
from an applet.
Protokol
z Suatu aturan atau mekanisme dimana dua
komputer atau lebih dapat saling berinterkoneksi.
z Protokol mendefinisikan suatu format paket data
yang akan dipertukarkan untuk menunjang
mekanisme tersebut.
z Protokol yang banyak digunakan adalah TCP/IP.
z Internet menggunakan TCP/IP.
Protokol TCP/IP
z Memiliki alamat unik yg diatur dengan protokol IP
dengan panjang 32 bit.
z Memiliki port yang digunakan sebagai mekanisme
untuk mengidentifikasi sebuah proses.
z Alamat port 0 - 65535
z Port 0 - 1023 Æ well known port
Misal port 80 untuk HTTP
z Port 1024 – 49151 Æ registered port
z Port 49152 – 65535 Æ Dynamic port / Private Port

z
Tipe pemrograman jaringan
z Connection Oriented
z Connectionless
Connection Oriented
z Memberi kepastian bahwa paket yang
dikirimkan dapat diterima oleh proses aplikasi
yang dituju dalam suatu urutan waktu
dikirimkan.
z Analog dengan hubungan jaringan telepon
z Pada TCP/IP, protokol connection oriented
adalah protokol TCP.
z Di Java diimplementasikan dengan class
Socket dan ServerSocket.
Connectionless
z Mengirim paket secara individu.
z Koneksi antara pengirim dan penerima tidak harus
terpelihara setelah paket diterima atau dikirim.
z Pada TCP/IP, protokol connection oriented adalah
protokol UDP.
z Connectionless lebih cepat daripada Connection
Oriented, namun connectionless tidak menjamin
pengiriman.
z Di Java diimplementasikan dengan class
DatagramPacket dan DatagramSocket.
Pemrograman Client/Server
z Melibatkan dua hal:
z Client
z Server
z Client adalah program yang terkoneksi
dengan sistem untuk meminta layanan.
z Server adalah program yang berjalan pada
suatu komputer yang menunggu program lain
yang minta layanan pada port tertentu.
Networking in Java
z Networking adalah kemampuan antar komputer
untuk saling berkomunikasi dan bertukar informasi.
z Menggunakan class-class yang ada di package
java.net.
z Package Java.net mendukung berbagai macam
operasi networking, termasuk koneksi dan retrieving
file dengan HTTP dan FTP, seperti yang dilakukan
oleh socket UNIX pada level terendah.
InetAddress
z Class yang berfungsi untuk mengambil informasi alamat IP suatu
komputer.
z Pada java.net.InetAddress
z Bersifat satic dan tidak memiliki konstruktor.
z Menyediakan fungsi yang dapat digunakan untuk mendapatkan alamat
IP.
z getByName(namaHost)
menerima sebuah string nama host dan mengembalikan alamat IP
sesungguhnya.
z getLocalHost()
akan mengembalikan informasi alamat IP dan nama host pada komputer
lokal.
z getHostName()
Gets the host name for this IP address
z getHostAddress()
Returns the IP address string in textual presentation.
z dll
Contoh : InetAddress

Output:
127.0.0.1
localhost
cadcam-student/10.252.107.100
Connection Oriented: Socket
z Class Socket dan ServerSocket adalah
abstraksi dari standar TCP socket
programming techniques.
z Class socket menyediakan client-side
socket interface yang mirip dengan standard
UNIX sockets.
z Socket dapat menangani dua macam stream:
z input stream
z output stream.
Socket
z Adalah class yang digunakan untuk membuat suatu
hubungan ke mesin atau proses lain.
z Socket dibuat untuk membuat aplikasi client pada
connection oriented.
z Setelah ada hubungan antar sistem, baru bisa
dilakukan pertukaran data melalui stream dengan
membuat input stream dan output stream dari obyek
socket.
Constructor Socket
z Socket(InetAddress address, int port)
Membuat sebuah stream socket dan koneksi ke suatu nomor port pada
sebuah komputer yang memiliki alamat IP.
z Socket(String host, int port)
Membuat sebuah stream socket dan juga koneksi ke suatu nomor port
tertentu pada sebuah komputer berdasarkan namanya.
z Socket(InetAddress address, int port, InetAddress localAddr, int
localPort) dan
z Socket(String host, int port, InetAddress localAaddr, int localPort)
Membuat sebuah socket yang mengkoneksikannya ke nomor port yang
dituju pada alamat IP yang disebutkan pada parameter address atau
nama host.
Selain itu juga dilakukan bind socket ke alamat lokal dan port lokal. (Hal
ini dilakukan jika koneksi antara client dan server membutuhkan nomor
port yang sudah ditentukan).
Method Socket
z getInputStream dan getOutputStream
Keduanya mengembalikan suatu obyek stream yang dapat
digunakan untuk berkomunikasi dengan socket.
z getInetAddress()
untuk mendapatkan nama host yang dituju dan alamat IP nya.
z getPort()
untuk mendapatkan nomor remote host.
z getLocalPort()
untuk mendapatkan nomor port localhost.
z getLocalAddress()
untuk mendapatkan alamat local di tempat socket digunakan.
z dll
ServerSocket
z Menyatakan suatu koneksi TCP yang berfungsi
untuk listen yang siap menerima suatu permintaan
dari proses lain.
z ServerSocket dipakai untuk membangun aplikasi
server yang bersifat connection oriented.
z Setelah ada hubungan antar sistem, baru bisa
dilakukan pertukaran data melalui stream dengan
membuat input stream dan output stream dari obyek
socket yang dihasilkan ketika kelas ServerSocket
menerima permintaan dari client melalui method
accept().
ServerSocket
z ServerSocket()
Creates an unbound server socket.
z ServerSocket(int port)
Creates a server socket on a specified port.
z ServerSocket(int port, int backlog)
Creates a server socket and binds it to the specified
local port number, with the specified backlog.
z ServerSocket(int port, int backlog, InetAddress bindAddr)
Create a server with the specified port, listen backlog,
and local IP address to bind to
Method ServerSocket
z accept()
menghasilkan sebuah obyek kelas socket
yang terkoneksi dengan client.
z close()
menutup sesi listen client.
Implementing a Client
z Client adalah program yang meminta layanan.
z Terdiri dari lima langkah:
1. Membuat obyek Socket.
2. Membuat output stream yang dapat digunakan untuk
mengirim informasi ke Socket.
3. Membuat input stream untuk membaca respon dari
server.
4. Melakukan I/O dengan input dan output streams.
5. Menutup koneksi Socket .
Implementing a Client
z Most of the methods described throw an
IOException and need to be wrapped in a
try/catch block.
1. Membuat obyek Socket

z Socket adalah class Java yang digunakan untuk


membuat koneksi.
z Client terhubung dengan server yang menunggu
koneksi pada port yang disediakan.
z Cara membuat socket :
Socket client = new Socket (“hostname”,portNumber);
or
Socket client = new Socket (“IP address”,portNumber);
2. Membuat output stream yang dapat
digunakan untuk mengirim informasi ke
Socket

z Java programming language mampu menulis data


ke file, socket, dan standard output.
z Java menyediakan berbagai macam class dan
interface untuk melakukan stream.
z Berbagai macam OutputStream yang tersedia
untuk file juga bisa digunakan untuk sockets.
z Salah satu output stream yang bisa digunakan
adalah PrintWriter.
2. Membuat output stream yang dapat
digunakan untuk mengirim informasi ke
Socket

z Konstruktor PrintWriter membutuhkan dua argumen:


z a generic OutputStream, which you can obtain from the
Socket by means of getOutputStream.
z A Boolean, you should specify true to force autoflush.
z Example:
PrintWriter out =
new PrintWriter(client.getOutputStream(),true);
z To send complex Java objects use ObjectOutputStream.
3. Membuat input stream untuk
membaca respon dari server.

z Use standard input stream layered on top of


socket.
z For handling character-based data, the
simplest is using InputStreamReader.
z Example:
InputStreamReader in =
new InputStreamReader(client.getInputStream());
3. Membuat input stream untuk membaca
respon dari server.

z In most cases, a better approach is to wrap the


socket’s generic InputStream inside a
BufferedReader
z Example:
BufferedReader in =
new BufferedReader(
new InputStreamReader(
client.getInputStream()));
z If the server is sending complex object, you will want
to open an ObjectInputStream and use
readObject to receive data.
4. Melakukan I/O dengan input dan
output streams

z A PrintStream has print and println


methods.
z PrintStream inherits some simple write
methods from OutputStream.
z write method let you send binary data be
sending an individual byte or an array of
bytes.
4. Melakukan I/O dengan input dan
output streams.

z A PrintWriter has print and println


methods.
z PrintWriter can create print writers for
different Unicode character sets.
4. Melakukan I/O dengan input dan
output streams.

z BufferedReader has two particularly useful


methods:
z read
Returns a single char.
z readLine
Reads a whole line and return a String. ReadLine
will wait until receiving a carriage return or an
EOF (the server close connection).
5. Close the Socket when done

z Close the socket with the close method:


client.close();
z This method closes the associated input and
output streams.
Implementing a Server
z The server is the program that starts first and waits for incoming
connections.
z Implementing a server consists of six basic steps:
1. Create a ServerSocket object
2. Create a Socket object from the ServerSocket
3. Create an input stream to read input from the client.
4. Create an output stream that can be used to send
information back to the client.
5. Do I/O with input and output streams.
6. Close the Socket when done.
Note: most of the methods described throw an IOException,
so they need to be wrapped inside a try/catch block in an
actual implementation.
1. Create a ServerSocket
object
z Requires only a port number, not a host:
z Example :
ServerSocket listenSocket =
new ServerSocket(portNumber);
z If you try to listen on a socket that is already in use,
an IOException will be thrown.
2. Create a Socket object from
the ServerSocket
z The ServerSocket accept method blocks until a connection is
established, the returns a normal Socket object.
z Example:
while(someCondition) {
Socket server = listenSocket.accept();
doSomethingWith(Server);
}
z To allow multiple simultaneous connections to the socket, pass
this socket to a separate thread to create the input/output
streams.
3. Create an input stream to
read input from the client
z Most server will read data before transmitting a
reply.
z Omit this step if the server only transmits
information.
z Using BufferedReader and
InputStreamReader as follows:
BufferedReader in =
new BufferedReader(
new InputStreamReader(server.getInputStream()));
z Use ObjectInputStream to receive complex
objects from another Java program.
4. Create an output stream that can be used to
send information back to the client.

z Use a generic OutputStream to send binary data.


z To use print and println command, create a
PrintWriter.
z Example:
PrintWriter out =
new PrintWriter(server.getOutputStream);
z Use an ObjectOutputStream if the client is
written in the Java programming language and is
expecting complex Java objects.
5.Do I/O with input and output
streams
z We can use class (the same way as client):
z BufferedReader
Provides read and readLine methods for reading
characters or strings.
z DataInputStream
Has readByte and readFully methods for reading a
single byte or a byte array.
z PrintWriter
Has print and println for sending high-level data
through a PrintWriter.
6. Close the Socket when done
z When finish, close the socket with the close
method:
server.close();
z This method closes the associated input and
output streams but does not terminate any
loop that listens for additional incoming
connections.
Connectionless: Datagram
z Terdapat 2 class yang tersedia untuk
mendukung koneksi ini:
z Java.net.DatagramPacket
Digunakan untuk mewakili paket informasi yang
akan dipertukarkan.
z Java.net.DatagramSocket
Merupakan socket yang mengirim dan menerima
DatagramPacket dari atau ke jaringan.
Bekerjasama dengan DatagramPacket untuk
menyediakan layanan komunikasi connectionless.
Constructor DatagramPacket
z DatagramPacket(byte[] buf, int length)
Digunakan untuk membuat paket data yang
disimpan dalam array of byte.
z DatagramPacket(byte[] buf, int length,
InetAddress address, in port)
Digunakan untuk membuat paket data yang
disimpan dalam array of byte dan dikirim ke
port tertentu.
Method DatagramPacket
z getData()
Mendapatkan informasi data.
z getLength()
Mendapatkan informasi panjang datagram.
z getAddress()
Mendapatkan informasi alamat IP.
z getPort()
Mendapatkan informasi nomor IP.
z dll
Constructor DatagramSocket
z DatagramSocket(int port)
Menyatakan penggunaan suatu nomor port sebagai
“pintu” untuk menerima koneksi dari client.
z DatagramSocket(int port, InetAddress Iaddr)
Membentuk koneksi dengan protokol UDP pada
alamat IP lokal tertentu pada nomor port tertentu.
z DatagramSocket()
Membentuk koneksi dengan protokol UDP pada
alamat IP lokal host dengan penentuan port random
berdasarkan tersedianya nomor port yang dapat
digunakan.
Method DatagramSocket
z send()
mengirimkan DatagramPacket yang
disebutkan pada parameter ke host dan port
yang dituju.
z receive()
memblok eksekusi sampai suatu paket
lengkap diterima dari socket.
URL
z URL = Uniform Resource Locator.
z URL refers to the unique address of any
document or other resource that is accessible
on the Internet.
z URL is part of the java.net package.
z Create a new instance of the class URL that
represents the address of the resource you
want to load
Contoh URL
z http://www.detik.com
z ftp://ftp.sun.com
z https://central.sun.net
z ldap://localhost:389/o=MyLdap

URL tersusun dari:


protokol://namahost:port/resource
URL Constructors
z Some URL object constructors:
z URL(String)
Creates a URL object from a full Web address such as
http://www.naviseek.com/java21 or ftp://ftp.netscape.com
z URL(String, String, int, String)
Creates a new URL object from:
z a protocol (such as “http”, or “ftp”),
z hostname (such as “www.naviseek.com” or “ftp.netcom.com”),
z port number (80 for HTTP),
z and a filename or path name.
z URL(String, String, String)
is the same as the previous constructor minus the port number.
z Using URL(String) constructor, we must deal with
MalformedURLException objects.
Method URL
z int getDefaultPort()
Mengambil informasi nomor port default dari protokol yang disertakan pada URL.
z String getFile()
Mengambil nama file dari URL.
z String getHost()
Mengambil nama komputer dari URL.
z String getPath()
Mengambil informasi path resource sebagai bagian dari URL.
z int getPort()
Mengambil informasi port yang merupakan bagian URL.
z String getProtocol()
Mengambil informasi nama protokol dari URL.
z String getQuery()
Mengambil query yang disertakan pada sebuah URL.
z String getRef()
Mengambil referensi atau anchor yang merupakan bagian dari URL.
z String toExternalForm()
Mengembalikan URL lengkap
z dll
URLConnection:
z Java program can reach a text document on the World Wide
Web.
z URLConnection merupakan abstract class yang mampu load dan
membuka koneksi suatu URL.
z Gunakan method openConnection untuk membuka koneksi
dengan URL tertentu.
URLConnection:
Opening a Stream over the Net
To load a text document of the Web and read it line by line:
1. Create a URL object that represents the resource’s
World Wide Web address.
2. Create a URLConnection object that can load that
URL and make a connection to the site hosting it.
3. Use the getInputStream() method of that
URLConnection object, create an
InputStreamReader that can read a stream of
data from the URL.
4. Using that input stream reader, create a
BufferReader object that can efficiently read
characters from an input stream.
Example:
Opening a Stream over the Net
URLConnection conn = null;
InputStreamReader in;
BufferedReader data;

in = new InputStreamReader(conn.getInputStream());
data = new BufferedReader(in);