Network Programming Oleh: Idris Winarno (thanks to my sist)
Menu z z z z
Pengantar Jaringan Komputer TCP/IP Pemrograman Client/Server Dasar networking di Java Socket: class Socket dan ServerSocket z z
z z
Mengimplementasikan network client. Mengimplementasikan a network server.
Datagram: class DatagramPacket dan DatagramSocket URL and URLConnection class z
Loading a Web page and any other resource with a URL from an applet.
Protokol z
z
z z
Suatu aturan atau mekanisme dimana dua komputer atau lebih dapat saling berinterkoneksi. Protokol mendefinisikan suatu format paket data yang akan dipertukarkan untuk menunjang mekanisme tersebut. Protokol yang banyak digunakan adalah TCP/IP. Internet menggunakan TCP/IP.
Protokol TCP/IP z z z
Memiliki alamat unik yg diatur dengan protokol IP dengan panjang 32 bit. Memiliki port yang digunakan sebagai mekanisme untuk mengidentifikasi sebuah proses. Alamat port 0 - 65535 z
z z
z
Port 0 - 1023 Æ well known port Misal port 80 untuk HTTP Port 1024 – 49151 Æ registered port Port 49152 – 65535 Æ Dynamic port / Private Port
Tipe pemrograman jaringan z z
Connection Oriented Connectionless
Connection Oriented z
z z z
Memberi kepastian bahwa paket yang dikirimkan dapat diterima oleh proses aplikasi yang dituju dalam suatu urutan waktu dikirimkan. Analog dengan hubungan jaringan telepon Pada TCP/IP, protokol connection oriented adalah protokol TCP. Di Java diimplementasikan dengan class Socket dan ServerSocket.
Connectionless z z
z
z
z
Mengirim paket secara individu. Koneksi antara pengirim dan penerima tidak harus terpelihara setelah paket diterima atau dikirim. Pada TCP/IP, protokol connection oriented adalah protokol UDP. Connectionless lebih cepat daripada Connection Oriented, namun connectionless tidak menjamin pengiriman. Di Java diimplementasikan dengan class DatagramPacket dan DatagramSocket.
Pemrograman Client/Server z
Melibatkan dua hal: z z
z
z
Client Server
Client adalah program yang terkoneksi dengan sistem untuk meminta layanan. Server adalah program yang berjalan pada suatu komputer yang menunggu program lain yang minta layanan pada port tertentu.
Networking in Java z
z
z
Networking adalah kemampuan antar komputer untuk saling berkomunikasi dan bertukar informasi. Menggunakan class-class yang ada di package java.net. 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 z z z
Class yang berfungsi untuk mengambil informasi alamat IP suatu komputer. Pada java.net.InetAddress Bersifat satic dan tidak memiliki konstruktor. Menyediakan fungsi yang dapat digunakan untuk mendapatkan alamat IP. z
z
z z z
getByName(namaHost) menerima sebuah string nama host dan mengembalikan alamat IP sesungguhnya. getLocalHost() akan mengembalikan informasi alamat IP dan nama host pada komputer lokal. getHostName() Gets the host name for this IP address getHostAddress() Returns the IP address string in textual presentation. dll
Contoh : InetAddress
Output: 127.0.0.1 localhost cadcam-student/10.252.107.100
Connection Oriented: Socket z
z
z
Class Socket dan ServerSocket adalah abstraksi dari standar TCP socket programming techniques. Class socket menyediakan client-side socket interface yang mirip dengan standard UNIX sockets. Socket dapat menangani dua macam stream: z z
input stream output stream.
Socket z
z
z
Adalah class yang digunakan untuk membuat suatu hubungan ke mesin atau proses lain. Socket dibuat untuk membuat aplikasi client pada connection oriented. 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
z
z z
Socket(InetAddress address, int port) Membuat sebuah stream socket dan koneksi ke suatu nomor port pada sebuah komputer yang memiliki alamat IP. Socket(String host, int port) Membuat sebuah stream socket dan juga koneksi ke suatu nomor port tertentu pada sebuah komputer berdasarkan namanya. Socket(InetAddress address, int port, InetAddress localAddr, int localPort) dan 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
z
z
z
z
z
getInputStream dan getOutputStream Keduanya mengembalikan suatu obyek stream yang dapat digunakan untuk berkomunikasi dengan socket. getInetAddress() untuk mendapatkan nama host yang dituju dan alamat IP nya. getPort() untuk mendapatkan nomor remote host. getLocalPort() untuk mendapatkan nomor port localhost. getLocalAddress() untuk mendapatkan alamat local di tempat socket digunakan. dll
ServerSocket z
z z
Menyatakan suatu koneksi TCP yang berfungsi untuk listen yang siap menerima suatu permintaan dari proses lain. ServerSocket dipakai untuk membangun aplikasi server yang bersifat connection oriented. 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 z z
z
ServerSocket() Creates an unbound server socket. ServerSocket(int port) Creates a server socket on a specified port. ServerSocket(int port, int backlog) Creates a server socket and binds it to the specified local port number, with the specified backlog. 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
z
accept() menghasilkan sebuah obyek kelas socket yang terkoneksi dengan client. close() menutup sesi listen client.
Implementing a Client Client adalah program yang meminta layanan. Terdiri dari lima langkah:
z z 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. Melakukan I/O dengan input dan output streams. Menutup koneksi Socket .
4. 5.
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
z
z
Socket adalah class Java yang digunakan untuk membuat koneksi. Client terhubung dengan server yang menunggu koneksi pada port yang disediakan. 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 z z z
Java programming language mampu menulis data ke file, socket, dan standard output. Java menyediakan berbagai macam class dan interface untuk melakukan stream. Berbagai macam OutputStream yang tersedia untuk file juga bisa digunakan untuk sockets. 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.
A Boolean, you should specify true to force autoflush. Example: z
z
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
z
z
Use standard input stream layered on top of socket. For handling character-based data, the simplest is using InputStreamReader. Example: InputStreamReader in = new InputStreamReader(client.getInputStream());
3. Membuat input stream untuk membaca respon dari server. z
z
In most cases, a better approach is to wrap the socket’s generic InputStream inside a BufferedReader 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
z
z
A PrintStream has print and println methods. PrintStream inherits some simple write methods from OutputStream. 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
z
A PrintWriter has print and println methods. 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
z
Returns a single char. 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 The server is the program that starts first and waits for incoming connections. Implementing a server consists of six basic steps:
z z
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.
1. Create a ServerSocket object z z
z
Requires only a port number, not a host: Example : ServerSocket listenSocket = new ServerSocket(portNumber); 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 z z
Most server will read data before transmitting a reply. Omit this step if the server only transmits information. 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. To use print and println command, create a PrintWriter.
z
Example:
z
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
z
z
BufferedReader Provides read and readLine methods for reading characters or strings. DataInputStream Has readByte and readFully methods for reading a single byte or a byte array. 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
z
Java.net.DatagramPacket Digunakan untuk mewakili paket informasi yang akan dipertukarkan. 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
z
DatagramPacket(byte[] buf, int length) Digunakan untuk membuat paket data yang disimpan dalam array of byte. 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
z
z
z
z
getData() Mendapatkan informasi data. getLength() Mendapatkan informasi panjang datagram. getAddress() Mendapatkan informasi alamat IP. getPort() Mendapatkan informasi nomor IP. dll
Constructor DatagramSocket z
z
z
DatagramSocket(int port) Menyatakan penggunaan suatu nomor port sebagai “pintu” untuk menerima koneksi dari client. DatagramSocket(int port, InetAddress Iaddr) Membentuk koneksi dengan protokol UDP pada alamat IP lokal tertentu pada nomor port tertentu. 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
z
send() mengirimkan DatagramPacket yang disebutkan pada parameter ke host dan port yang dituju. receive() memblok eksekusi sampai suatu paket lengkap diterima dari socket.
URL z z
z z
URL = Uniform Resource Locator. URL refers to the unique address of any document or other resource that is accessible on the Internet. URL is part of the java.net package. Create a new instance of the class URL that represents the address of the resource you want to load
Contoh URL z z z z
http://www.detik.com ftp://ftp.sun.com https://central.sun.net ldap://localhost:389/o=MyLdap
URL tersusun dari: protokol://namahost:port/resource
URL Constructors z
Some URL object constructors:
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. Using URL(String) constructor, we must deal with MalformedURLException objects. z
z
Method URL z z z z z z z z z z
int getDefaultPort() Mengambil informasi nomor port default dari protokol yang disertakan pada URL. String getFile() Mengambil nama file dari URL. String getHost() Mengambil nama komputer dari URL. String getPath() Mengambil informasi path resource sebagai bagian dari URL. int getPort() Mengambil informasi port yang merupakan bagian URL. String getProtocol() Mengambil informasi nama protokol dari URL. String getQuery() Mengambil query yang disertakan pada sebuah URL. String getRef() Mengambil referensi atau anchor yang merupakan bagian dari URL. String toExternalForm() Mengembalikan URL lengkap dll
URLConnection: z
z
z
Java program can reach a text document on the World Wide Web. URLConnection merupakan abstract class yang mampu load dan membuka koneksi suatu URL. 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. 2. 3.
4.
Create a URL object that represents the resource’s World Wide Web address. Create a URLConnection object that can load that URL and make a connection to the site hosting it. Use the getInputStream() method of that URLConnection object, create an InputStreamReader that can read a stream of data from the URL. 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);