Network Programming
Oleh:
Idris Winarno
(thanks to my sist)
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
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
Tipe pemrograman jaringan
z
Connection Oriented
zConnectionless
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
zPada TCP/IP, protokol connection oriented
adalah protokol TCP.
z
Di Java diimplementasikan dengan class
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
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
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.
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,
Method ServerSocket
z
accept()
menghasilkan sebuah obyek kelas socket
yang terkoneksi dengan client.
z
close()
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
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);
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 =
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
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
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
5. Close the Socket when done
z
Close the socket with the close method:
client.close();
z
This method closes the associated input and
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
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
Connectionless: Datagram
z
Terdapat 2 class yang tersedia untuk
mendukung koneksi ini:
z Java.net.DatagramPacketDigunakan 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
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
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
zftp://ftp.sun.com
z
https://central.sun.net
z
ldap://localhost:389/o=MyLdap
URL tersusun dari:
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
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
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);