unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
Socket

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 #

  1. Server:

    • Membuat instance ServerSocket pada port tertentu.
    • Menggunakan metode accept() untuk menerima koneksi dari klien.
    • Menggunakan InputStream dan OutputStream untuk membaca dan menulis data ke dan dari klien.
  2. Client:

    • Membuat instance Socket yang terhubung ke alamat server dan port yang sesuai.
    • Menggunakan InputStream dan OutputStream untuk membaca dan menulis data ke dan dari server.

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.

« I/O
Web Socket »