Java Networking adalah konsep menghubungkan dua atau lebih perangkat komputasi secara bersamaan sehingga kita dapat berbagi sumber daya. Pemrograman soket Java menyediakan fasilitas untuk berbagi data antara perangkat komputasi yang berbeda.
Keuntungan Networking di Java
Istilah pemrograman jaringan mengacu pada menulis program yang dijalankan di beberapa perangkat (komputer), di mana semua perangkat terhubung satu sama lain menggunakan jaringan. Paket java.net dari J2SE API berisi kumpulan kelas dan antarmuka yang menyediakan detail komunikasi tingkat rendah, memungkinkan Anda untuk menulis program yang berfokus pada pemecahan masalah yang dihadapi.
Paket java.net menyediakan dukungan untuk dua protokol jaringan yang umum
Pembahasan kali ini akan membahas mengenai 2 topik penting yaitu
Section Artikel
Terminologi jaringan java yang banyak digunakan diberikan di bawah ini
Alamat IP adalah nomor unik yang ditetapkan ke simpul jaringan, mis. 192.168.0.1. Ini terdiri dari oktet yang berkisar dari 0 hingga 255. Ini adalah alamat logis yang dapat diubah.
Protokol adalah seperangkat aturan yang pada dasarnya diikuti untuk komunikasi. Sebagai contohnya yaitu
Nomor port digunakan untuk mengidentifikasi aplikasi yang berbeda secara unik. Ini bertindak sebagai titik akhir komunikasi antar aplikasi. Nomor port dikaitkan dengan alamat IP untuk komunikasi antara dua aplikasi.
Alamat MAC (Media Access Control) adalah pengenal unik NIC (Network Interface Controller). Node jaringan dapat memiliki beberapa NIC tetapi masing-masing dengan MAC unik.
Dalam protokol berorientasi koneksi, pengakuan dikirim oleh penerima. Jadi bisa diandalkan tapi lambat. Contoh dari protokol berorientasi koneksi adalah TCP. Namun, dalam protokol tanpa koneksi, pengakuan tidak dikirim oleh penerima. Jadi tidak bisa diandalkan tapi cepat. Contoh dari protokol tanpa koneksi adalah UDP.
Soket adalah titik akhir antara komunikasi dua arah.
Paket java.net menyediakan banyak kelas untuk menangani aplikasi jaringan di Java. Daftar kelas ini diberikan di bawah ini:
Pemrograman Java Socket digunakan untuk komunikasi antara aplikasi yang berjalan pada JRE yang berbeda.Pemrograman Java Socket dapat berorientasi koneksi atau tanpa koneksi.Kelas Socket dan ServerSocket digunakan untuk pemrograman soket berorientasi koneksi dan kelas DatagramSocket dan DatagramPacket digunakan untuk pemrograman soket tanpa koneksi.
Soket menyediakan mekanisme komunikasi antara dua komputer menggunakan TCP. Program klien membuat soket di ujung komunikasi dan mencoba menghubungkan soket itu ke server.
Ketika koneksi dibuat, server membuat objek soket di ujung komunikasi. Klien dan server sekarang dapat berkomunikasi dengan menulis ke dan membaca dari soket.
Kelas java.net.Socket mewakili soket, dan kelas java.net.ServerSocket menyediakan mekanisme untuk program server untuk mendengarkan klien dan membuat koneksi dengan mereka.
Langkah-langkah berikut ini terjadi saat membuat sambungan TCP antara dua komputer menggunakan soket
Setelah koneksi dibuat, komunikasi dapat terjadi menggunakan aliran I / O. Setiap soket memiliki OutputStream dan InputStream. OutputStream klien terhubung ke InputStream server, dan InputStream klien terhubung ke OutputStream server.
TCP adalah protokol komunikasi dua arah, sehingga data dapat dikirim melalui kedua aliran pada waktu yang bersamaan. Berikut ini adalah kelas berguna yang menyediakan set lengkap metode untuk mengimplementasikan soket.
Klien dalam pemrograman soket harus mengetahui dua informasi:
Di sini, kita akan membuat komunikasi klien dan server satu arah. Dalam aplikasi ini, klien mengirim pesan ke server, server membaca pesan dan mencetaknya. Di sini, dua kelas digunakan: Socket dan ServerSocket. Kelas Socket digunakan untuk mengkomunikasikan klien dan server. Melalui kelas ini, kita dapat membaca dan menulis pesan. Kelas ServerSocket digunakan di sisi server. Metode accept () dari kelas ServerSocket memblokir konsol hingga klien tersambung. Setelah koneksi klien berhasil, ia mengembalikan contoh Socket di sisi server.
Soket hanyalah titik akhir untuk komunikasi antar mesin. Kelas Socket dapat digunakan untuk membuat socket. Kelas java.net.Socket mewakili soket yang digunakan klien dan server untuk berkomunikasi satu sama lain. Klien memperoleh objek Socket dengan membuat instance, sedangkan server memperoleh objek Socket dari nilai kembalian metode accept ().
Metode yang penting pada socket yaitu
Ketika konstruktor Socket kembali, itu tidak hanya memberi contoh objek Socket tetapi sebenarnya mencoba untuk terhubung ke server dan port yang ditentukan. Beberapa metode yang menarik di kelas Socket tercantum di sini. Perhatikan bahwa klien dan server memiliki objek Socket, sehingga metode ini dapat dipanggil oleh klien dan server.
Kelas ServerSocket dapat digunakan untuk membuat soket server. Objek ini digunakan untuk menjalin komunikasi dengan klien. Jika konstruktor ServerSocket tidak menampilkan pengecualian, itu berarti aplikasi Anda telah berhasil terikat ke port yang ditentukan dan siap untuk permintaan klien. Metode yang penting pada ServerSocket yaitu
Ketika ServerSocket memanggil accept (), metode tidak kembali sampai klien terhubung. Setelah klien tersambung, ServerSocket membuat Socket baru di port yang tidak ditentukan dan mengembalikan referensi ke Socket baru ini. Koneksi TCP sekarang ada antara klien dan server, dan komunikasi dapat dimulai.
Membuat Server
Untuk membuat aplikasi server, kita perlu membuat instance kelas ServerSocket. Di sini, kami menggunakan nomor port 6666 untuk komunikasi antara klien dan server. Anda juga dapat memilih nomor port lain. Metode accept () menunggu klien. Jika klien terhubung dengan nomor port yang diberikan, itu mengembalikan contoh Socket. Sintaksnya dapat dibuat dengan cara berikut
ServerSocket ss=new ServerSocket(6666);
Socket s=ss.accept();//establishes connection and waits for the client
Membuat Client
Untuk membuat aplikasi klien, kita perlu membuat instance kelas Socket. Di sini, kita perlu memasukkan alamat IP atau nama host dari Server dan nomor port. Di sini, kami menggunakan “localhost” karena server kami berjalan di sistem yang sama. Sintaksnya dapat dibuat dengan cara berikut
Socket s=new Socket("localhost",6666);
Mari kita lihat pemrograman soket Java sederhana di mana klien mengirim teks dan server menerima dan mencetaknya.
Mari kita buat contoh sederhananya dengan membuat file server dengan nama MyServer.java
import java.io.*; import java.net.*; public class MyServer { public static void main(String[] args){ try{ ServerSocket ss=new ServerSocket(6666); Socket s=ss.accept();//establishes connection DataInputStream dis=new DataInputStream(s.getInputStream()); String str=(String)dis.readUTF(); System.out.println("message= "+str); ss.close(); }catch(Exception e){System.out.println(e);} } }
Mari kita buat contoh sederhananya dengan membuat file client dengan nama MyClient.java
import java.io.*; import java.net.*; public class MyClient { public static void main(String[] args) { try{ Socket s=new Socket("localhost",6666); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); dout.writeUTF("Hello Server"); dout.flush(); dout.close(); s.close(); }catch(Exception e){System.out.println(e);} } }
Untuk menjalankan program ini, buka dua command prompt dan jalankan setiap program pada setiap command prompt seperti yang ditampilkan pada gambar di bawah ini. Setelah menjalankan aplikasi klien, sebuah pesan akan ditampilkan di konsol server.
Contoh lainnya kita juga dapat membuat Socket Server dan Socket Client dengan menuliskan kode berikut ini
Mari kita buat contoh sederhananya dengan membuat file server dengan nama GreetingClient.java. GreetingClient berikut adalah program klien yang terhubung ke server dengan menggunakan soket dan mengirim salam, dan kemudian menunggu tanggapan.
// File Name GreetingClient.java import java.net.*; import java.io.*; public class GreetingClient { public static void main(String [] args) { String serverName = args[0]; int port = Integer.parseInt(args[1]); try { System.out.println("Connecting to " + serverName + " on port " + port); Socket client = new Socket(serverName, port); System.out.println("Just connected to " + client.getRemoteSocketAddress()); OutputStream outToServer = client.getOutputStream(); DataOutputStream out = new DataOutputStream(outToServer); out.writeUTF("Hello from " + client.getLocalSocketAddress()); InputStream inFromServer = client.getInputStream(); DataInputStream in = new DataInputStream(inFromServer); System.out.println("Server says " + in.readUTF()); client.close(); } catch (IOException e) { e.printStackTrace(); } } }
Mari kita buat contoh sederhananya dengan membuat file server dengan nama GreetingServer.java. Program GreetingServer berikut adalah contoh aplikasi server yang menggunakan kelas Socket untuk mendengarkan klien pada nomor port yang ditentukan oleh argumen baris perintah
// File Name GreetingServer.java import java.net.*; import java.io.*; public class GreetingServer extends Thread { private ServerSocket serverSocket; public GreetingServer(int port) throws IOException { serverSocket = new ServerSocket(port); serverSocket.setSoTimeout(10000); } public void run() { while(true) { try { System.out.println("Waiting for client on port " + serverSocket.getLocalPort() + "..."); Socket server = serverSocket.accept(); System.out.println("Just connected to " + server.getRemoteSocketAddress()); DataInputStream in = new DataInputStream(server.getInputStream()); System.out.println(in.readUTF()); DataOutputStream out = new DataOutputStream(server.getOutputStream()); out.writeUTF("Thank you for connecting to " + server.getLocalSocketAddress() + "\nGoodbye!"); server.close(); } catch (SocketTimeoutException s) { System.out.println("Socket timed out!"); break; } catch (IOException e) { e.printStackTrace(); break; } } } public static void main(String [] args) { int port = Integer.parseInt(args[0]); try { Thread t = new GreetingServer(port); t.start(); } catch (IOException e) { e.printStackTrace(); } } }
Kompilasi klien dan server dan kemudian mulai server sebagai berikut dan akan menghasilkan
$ java GreetingServer 6066
Waiting for client on port 6066...
Periksa program klien sebagai berikut
$ java GreetingClient localhost 6066
Connecting to localhost on port 6066
Just connected to localhost/127.0.0.1:6066
Server says Thank you for connecting to /127.0.0.1:6066
Goodbye!
Dalam contoh ini, klien akan menulis terlebih dahulu ke server kemudian server akan menerima dan mencetak teks tersebut. Kemudian server akan menulis ke klien dan klien akan menerima dan mencetak teks tersebut. Langkahnya terus berjalan.
Mari kita buat contoh sederhananya dengan membuat file server dengan nama MyServer.java
import java.net.*; import java.io.*; class MyServer{ public static void main(String args[])throws Exception{ ServerSocket ss=new ServerSocket(3333); Socket s=ss.accept(); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str="",str2=""; while(!str.equals("stop")){ str=din.readUTF(); System.out.println("client says: "+str); str2=br.readLine(); dout.writeUTF(str2); dout.flush(); } din.close(); s.close(); ss.close(); } }
Mari kita buat contoh sederhananya dengan membuat file client dengan nama MyClient.java
import java.net.*; import java.io.*; class MyClient{ public static void main(String args[])throws Exception{ Socket s=new Socket("localhost",3333); DataInputStream din=new DataInputStream(s.getInputStream()); DataOutputStream dout=new DataOutputStream(s.getOutputStream()); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String str="",str2=""; while(!str.equals("stop")){ str=br.readLine(); dout.writeUTF(str); dout.flush(); str2=din.readUTF(); System.out.println("Server says: "+str2); } dout.close(); s.close(); } }
Kelas URL Java mewakili URL. URL adalah singkatan dari Uniform Resource Locator. Ini menunjuk ke sumber daya di World Wide Web. Sebagai contohnya yaitu
https://dosenit.com/
Sebuah URL berisi banyak informasi yaitu bisa kita sebutkan seperti
Kelas java.net.URL mewakili URL dan memiliki sekumpulan metode lengkap untuk memanipulasi URL di Java. Kelas URL berisi banyak metode untuk mengakses berbagai bagian URL yang diwakili. Kelas URL memiliki beberapa konstruktor untuk membuat URL, termasuk yang berikut ini
Kelas java.net.URL menyediakan banyak metode. Metode penting dari kelas URL diberikan di bawah ini
Contoh dalam penggunaan Kelas URL di java dapat kita buat dengan contoh kode berikut
//URLDemo.java import java.net.*; public class URLDemo{ public static void main(String[] args){ try{ URL url=new URL("http://www.dosenit.com/java-tutorial"); System.out.println("Protocol: "+url.getProtocol()); System.out.println("Host Name: "+url.getHost()); System.out.println("Port Number: "+url.getPort()); System.out.println("File Name: "+url.getFile()); }catch(Exception e){System.out.println(e);} } }
Kemudian akan menghasilkan output berikut ini
Protocol: http
Host Name: www.dosenit.com
Port Number: -1
File Name: /java-tutorial
Atau kita dapat juga membuat contoh lainnya seperti kode berikut
//URLDemo.java import java.net.*; public class URLDemo{ public static void main(String[] args){ try{ URL url=new URL("https://www.google.com/search?q=dosenit&oq=dosenit&sourceid=chrome&ie=UTF-8"); System.out.println("Protocol: "+url.getProtocol()); System.out.println("Host Name: "+url.getHost()); System.out.println("Port Number: "+url.getPort()); System.out.println("Default Port Number: "+url.getDefaultPort()); System.out.println("Query String: "+url.getQuery()); System.out.println("Path: "+url.getPath()); System.out.println("File: "+url.getFile()); }catch(Exception e){System.out.println(e);} } }
Kemudian akan menghasilkan output berikut ini
Protocol: https
Host Name: www.google.com
Port Number: -1
Default Port Number: 443
Query String: q=dosenit&oq=dosenit&sourceid=chrome&ie=UTF-8
Path: /search
File: /search?q=dosenit&oq=dosenit&sourceid=chrome&ie=UTF-8
Kelas Java URLConnection merepresentasikan hubungan komunikasi antara URL dan aplikasi. Kelas ini dapat digunakan untuk membaca dan menulis data ke sumber daya tertentu yang dirujuk oleh URL. Metode openConnection () mengembalikan java.net.URLConnection, kelas abstrak yang subkelasnya mewakili berbagai jenis sambungan URL. Misalnya dengan contoh berikut ini
Cara mendapatkan objek kelas URLConnection adalah dengan Metode openConnection () dari kelas URL mengembalikan objek kelas URLConnection. Kemudian dapat kita buat sintaksnya dengan sintaks berikut ini
public URLConnection openConnection()throws IOException{}
Menampilkan kode sumber halaman web dengan kelas URLConnecton yaitu Kelas URLConnection menyediakan banyak metode, kita dapat menampilkan semua data halaman web dengan menggunakan metode getInputStream (). Metode getInputStream () mengembalikan semua data dari URL yang ditentukan dalam aliran yang dapat dibaca dan ditampilkan.
Contoh dalam penggunaan Kelas URLConnection di java dapat kita buat dengan contoh kode berikut
import java.io.*; import java.net.*; public class URLConnectionExample { public static void main(String[] args){ try{ URL url=new URL("http://www.dosenit.com/java-tutorial"); URLConnection urlcon=url.openConnection(); InputStream stream=urlcon.getInputStream(); int i; while((i=stream.read())!=-1){ System.out.print((char)i); } }catch(Exception e){System.out.println(e);} } }
Contoh lain yang bisa kita buat adalah dengan membuat kode berikut. Program URLConnectionDemo berikut menyambung ke URL yang dimasukkan dari baris perintah. Jika URL mewakili sumber daya HTTP, koneksi dilemparkan ke HttpURLConnection, dan data dalam sumber daya dibaca satu baris dalam satu waktu.
// File Name : URLConnDemo.java import java.net.*; import java.io.*; public class URLConnDemo { public static void main(String [] args) { try { URL url = new URL("https://www.dosenit.com"); URLConnection urlConnection = url.openConnection(); HttpURLConnection connection = null; if(urlConnection instanceof HttpURLConnection) { connection = (HttpURLConnection) urlConnection; }else { System.out.println("Please enter an HTTP URL."); return; } BufferedReader in = new BufferedReader( new InputStreamReader(connection.getInputStream())); String urlString = ""; String current; while((current = in.readLine()) != null) { urlString += current; } System.out.println(urlString); } catch (IOException e) { e.printStackTrace(); } } }
Maka akan menghasilkan output seperti ini
$ java URLConnDemo
.....a complete HTML content of home page of dosenit.com.....
Kelas HttpURLConnection Java adalah URLConnection khusus http. Ini berfungsi hanya untuk protokol HTTP. Dengan bantuan kelas HttpURLConnection, Anda dapat memperoleh informasi dari URL HTTP seperti informasi header, kode status, kode respons, dan lainnya. Java.net.HttpURLConnection adalah subkelas dari kelas URLConnection.
Cara mendapatkan objek kelas HttpURLConnection yaitu dengan Metode openConnection () dari kelas URL mengembalikan objek kelas URLConnection. Kemudian dapat kita buat sintaksnya dengan sintaks berikut ini
public URLConnection openConnection()throws IOException{}
Anda dapat mengetikkannya ke tipe HttpURLConnection seperti yang diberikan di bawah ini
URL url=new URL("http://www.dosenit.com/java-tutorial");
HttpURLConnection huc=(HttpURLConnection)url.openConnection();
Contoh dalam penggunaan Kelas HttpURLConnection di java dapat kita buat dengan contoh kode berikut
import java.io.*; import java.net.*; public class HttpURLConnectionDemo{ public static void main(String[] args){ try{ URL url=new URL("http://www.dosenit.com/java-tutorial"); HttpURLConnection huc=(HttpURLConnection)url.openConnection(); for(int i=1;i<=8;i++){ System.out.println(huc.getHeaderFieldKey(i)+" = "+huc.getHeaderField(i)); } huc.disconnect(); }catch(Exception e){System.out.println(e);} } }
Kemudian akan menghasilkan output berikut ini
Date = Mon, 19 Oct 2020 19:31:14 GMT
Set-Cookie = JSESSIONID=D70B87DBB832820CACA5998C90939D48; Path=/
Content-Type = text/html
Cache-Control = max-age=2592000
Expires = Fri, 19 Nov 2021 19:31:14 GMT
Vary = Accept-Encoding,User-Agent
Connection = close
Transfer-Encoding = chunked
Kelas Java InetAddress mewakili alamat IP. Kelas java.net.InetAddress menyediakan metode untuk mendapatkan IP dari nama host apa pun, misalnya www.dosenit.com, www.google.com, www.facebook.com, dan lainnya. Kelas ini mewakili alamat Internet Protocol (IP).
Alamat IP diwakili oleh nomor 32-bit atau 128-bit unsigned. Sebuah contoh dari InetAddress mewakili alamat IP dengan nama host yang sesuai. Ada dua jenis tipe alamat: Unicast dan Multicast. Unicast adalah pengenal untuk satu antarmuka sedangkan Multicast adalah pengenal untuk satu set antarmuka. Selain itu, InetAddress memiliki mekanisme cache untuk menyimpan resolusi nama host yang berhasil dan tidak berhasil. Metode kelas InetAddress yang umum digunakan yaitu
Contoh dalam penggunaan Kelas InetAddress di java dapat kita buat dengan contoh kode berikut
import java.io.*; import java.net.*; public class InetDemo{ public static void main(String[] args){ try{ InetAddress ip=InetAddress.getByName("www.dosenit.com"); System.out.println("Host Name: "+ip.getHostName()); System.out.println("IP Address: "+ip.getHostAddress()); }catch(Exception e){System.out.println(e);} } }
Kemudian akan menghasilkan output berikut ini
Host Name: www.dosenit.com
IP Address: 192.168.1.199
Kelas Java DatagramSocket dan DatagramPacket digunakan untuk pemrograman soket tanpa koneksi.
Kelas Java DatagramSocket mewakili soket tanpa koneksi untuk mengirim dan menerima paket datagram. Datagram pada dasarnya adalah informasi tetapi tidak ada jaminan konten, waktu kedatangan atau waktu kedatangannya.
Konstruktor kelas DatagramSocket yang umum digunakan yaitu
Java DatagramPacket adalah pesan yang dapat dikirim atau diterima. Jika Anda mengirim lebih dari satu paket, paket mungkin datang dalam urutan apa pun. Selain itu, pengiriman paket tidak dijamin. Konstruktor kelas DatagramPacket yang umum digunakan yaitu
Contoh dalam penggunaan Sending DatagramPacket oleh DatagramSocket di java dapat kita buat dengan contoh kode berikut
//DSender.java import java.net.*; public class DSender{ public static void main(String[] args) throws Exception { DatagramSocket ds = new DatagramSocket(); String str = "Welcome to My Tutorial"; InetAddress ip = InetAddress.getByName("127.0.0.1"); DatagramPacket dp = new DatagramPacket(str.getBytes(), str.length(), ip, 3000); ds.send(dp); ds.close(); } }
Contoh dalam penggunaan Receiving DatagramPacket oleh DatagramSocket di java dapat kita buat dengan contoh kode berikut
//DReceiver.java import java.net.*; public class DReceiver{ public static void main(String[] args) throws Exception { DatagramSocket ds = new DatagramSocket(3000); byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, 1024); ds.receive(dp); String str = new String(dp.getData(), 0, dp.getLength()); System.out.println(str); ds.close(); } }