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
ServerSocketpada port tertentu. - Menggunakan metode
accept()untuk menerima koneksi dari klien. - Menggunakan
InputStreamdanOutputStreamuntuk membaca dan menulis data ke dan dari klien.
- Membuat instance
-
Client:
- Membuat instance
Socketyang terhubung ke alamat server dan port yang sesuai. - Menggunakan
InputStreamdanOutputStreamuntuk 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.