Quay lại danh sách
Java
2024-04-20
25 phút đọc

Lập trình Socket trong Java: Xây dựng TCP server & client đơn giản

Lập trình Socket trong Java: TCP Server & Client

Socket Programming giúp ứng dụng của bạn giao tiếp trực tiếp qua mạng bằng TCP/UDP. Trong bài viết này, chúng ta tập trung vào TCP – giao thức tin cậy, có cơ chế kiểm soát thứ tự gói tin.

1. Khái niệm nhanh

  • ServerSocket: lắng nghe kết nối từ client trên một cổng (port) cụ thể.
  • Socket: đại diện cho kết nối hai chiều giữa client và server.

2. Viết một TCP server đơn giản

public class SimpleTcpServer {
    public static void main(String[] args) throws IOException {
        try (ServerSocket serverSocket = new ServerSocket(9999)) {
            System.out.println("Server listening on port 9999...");

            while (true) {
                Socket client = serverSocket.accept();
                System.out.println("Client connected: " + client.getInetAddress());

                try (BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                     PrintWriter out = new PrintWriter(client.getOutputStream(), true)) {

                    String line;
                    while ((line = in.readLine()) != null) {
                        System.out.println("Received: " + line);
                        out.println("Echo: " + line);
                    }
                }
            }
        }
    }
}

3. Viết một TCP client tương ứng

public class SimpleTcpClient {
    public static void main(String[] args) throws IOException {
        try (Socket socket = new Socket("localhost", 9999);
             BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
             PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {

            String line;
            while ((line = console.readLine()) != null) {
                out.println(line);
                System.out.println(in.readLine());
            }
        }
    }
}

4. Mở rộng: xử lý nhiều client

Một server thực tế cần xử lý nhiều client đồng thời, thường dùng Thread hoặc ExecutorService để mỗi client chạy trên một luồng riêng.


Socket Programming là bước đệm tuyệt vời để hiểu sâu hơn về HTTP server, WebSocket và các framework mạng cấp cao trong Java.