Socket #
Socket adalah antarmuka dalam pemrograman jaringan yang memungkinkan komunikasi antara dua proses, baik di komputer yang sama atau di komputer yang berbeda dalam jaringan. Dalam Java, soket digunakan untuk berkomunikasi antara klien dan server dengan menggunakan protokol jaringan, biasanya TCP/IP. Java menyediakan kelas-kelas dalam paket java.net
untuk memfasilitasi komunikasi melalui soket.
Konsep Dasar Socket #
- Socket: Titik akhir dari komunikasi dua arah antara dua aplikasi di jaringan.
- Server Socket: Menunggu dan menerima koneksi dari klien.
- Client Socket: Membuat koneksi ke server dan berkomunikasi melalui soket.
Socket di Java #
Server Socket #
ServerSocket
digunakan oleh aplikasi server untuk menerima koneksi dari klien.
Contoh Server Socket:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleServer {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(12345)) {
System.out.println("Server is listening on port 12345");
// Tunggu dan terima koneksi dari klien
Socket socket = serverSocket.accept();
System.out.println("Client connected");
// Input dan output stream untuk komunikasi
try (BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {
// Membaca data dari klien
String clientMessage = in.readLine();
System.out.println("Received from client: " + clientMessage);
// Mengirim balasan ke klien
out.println("Hello, client! Your message was received.");
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Client Socket #
Socket
digunakan oleh aplikasi klien untuk membuat koneksi ke server.
Contoh Client Socket:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class SimpleClient {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 12345);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
// Mengirim data ke server
out.println("Hello, server!");
// Membaca balasan dari server
String serverResponse = in.readLine();
System.out.println("Server response: " + serverResponse);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Proses Komunikasi #
-
Server:
- Membuat instance
ServerSocket
pada port tertentu. - Menggunakan metode
accept()
untuk menerima koneksi dari klien. - Menggunakan
InputStream
danOutputStream
untuk membaca dan menulis data ke dan dari klien.
- Membuat instance
-
Client:
- Membuat instance
Socket
yang terhubung ke alamat server dan port yang sesuai. - Menggunakan
InputStream
danOutputStream
untuk membaca dan menulis data ke dan dari server.
- Membuat instance
Komunikasi Dua Arah #
Untuk komunikasi dua arah, server dan klien dapat saling mengirim data.
Contoh:
Server:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TwoWayServer {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(12345)) {
System.out.println("Server is listening on port 12345");
Socket socket = serverSocket.accept();
System.out.println("Client connected");
try (BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {
// Komunikasi dua arah
String clientMessage = in.readLine();
System.out.println("Received from client: " + clientMessage);
out.println("Received your message: " + clientMessage);
// Tambahan komunikasi jika diperlukan
String anotherMessage = in.readLine();
System.out.println("Received additional message from client: " + anotherMessage);
out.println("Received your additional message: " + anotherMessage);
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Client:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class TwoWayClient {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 12345);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
// Mengirim data ke server
out.println("Hello, server!");
// Membaca balasan dari server
String serverResponse = in.readLine();
System.out.println("Server response: " + serverResponse);
// Mengirim pesan tambahan
out.println("Here's another message!");
// Membaca balasan tambahan dari server
String additionalResponse = in.readLine();
System.out.println("Server additional response: " + additionalResponse);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Kesimpulan #
Socket adalah cara untuk menghubungkan dan berkomunikasi antara aplikasi klien dan server melalui jaringan. Java menyediakan API java.net
dengan kelas seperti Socket
dan ServerSocket
untuk memudahkan pembuatan aplikasi yang berkomunikasi melalui soket. Komunikasi dilakukan melalui aliran data (stream) dengan menggunakan InputStream
dan OutputStream
. Multithreading sering digunakan pada server untuk menangani banyak koneksi klien secara bersamaan, dan pengelolaan sumber daya serta penanganan kesalahan adalah aspek penting dari pengembangan aplikasi jaringan yang robust.