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.