Kiểm tra n được gửi từ Client có phải là số hoàn hảo

Xây dựng ứng dụng cho phép client để gửi một số nguyên tới máy chủ và nhận kết quả từ máy chủ. Kiểm tra xem số đó có phải là số hoàn hảo hay không.

Xem thêm:

kiểm tra số hoàn hảo c++

gửi chuỗi đảo ngược cho client

1. Mô tả bài toán

Viết chương trình tìm số hoàn hảo, hoạt động theo mô hình client-server, sử dụng TCP socket:

  • Client gửi 1 số n nguyên dương đến server.
  • Trả kết quả về client và xuất ra màn hình “la so hoan hao” hoặc “khong phai la so hoan hao”.

Video hướng dẫn chi tiết:

2. Code tham khảo

2.1 Code phía Server java

– Kết nối và chờ kết nối từ client:

Máy chủ tạo một ServerSocket và chờ đợi kết nối từ một client thông qua cổng được chỉ định.

– Kiểm tra kết nối và xử lý dữ liệu từ client:

Máy chủ chấp nhận kết nối từ client và kiểm tra xem kết nối đã được thiết lập thành công hay không.

Nếu kết nối thành công, máy chủ nhận dữ liệu từ client thông qua Scanner.

– Kiểm tra xem số được gửi từ client có phải là số hoàn hảo hay không:

Máy chủ gọi phương thức isPerfectNumber() để kiểm tra xem số nhận được từ client có phải là số hoàn hảo không.
Gửi kết quả kiểm tra về cho client:

Sau khi kiểm tra, máy chủ gửi kết quả kiểm tra (là “la so hoan hao” hoặc “khong phai la so hoan hao”) trở lại cho client thông qua PrintWriter.

public class Server {
    
    public final static int SERVER_PORT = 9555;
    public static void main(String[] args) {
        try {
            System.out.println("Waitting Connected!");
            
            //Mo cong
            ServerSocket serverSocket = new ServerSocket(SERVER_PORT);
            Socket socket = serverSocket.accept();
            
            //Kiem tra ket noi
            boolean status = socket.isConnected();
            if(status){
                System.out.println("Client Connected!");
                
                //Nhan du lieu tu client
                Scanner in = new Scanner(socket.getInputStream());
                if(in.hasNextLine()){
                    String intStr = in.nextLine();
                    int n = Integer.parseInt(intStr);
                    
                    String outStr = isPerfectNumber(n);
                    
                    //Gui ket qua den client
                    PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
                    out.println(outStr);
                    
                }
            }else{
                System.out.println("Connect Fail!");
            }
            
            serverSocket.close();
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public static String isPerfectNumber(int n){
        String result = "";
        int sum = 0;
        
        if(n < 6){
            result = "khong phai la so hoan hao";
        }else{
            for(int i=1;i<n;i++){
                if(n % i ==0){
                    sum = sum+i;
                }
            }
            
            if(sum==n){
                result = "la so hoan hao";
            }else{
                result = "khong phai la so hoan hao";
            }
        }
        
        return result;
    }
}

2.2 Code phía Client java

– Kết nối đến máy chủ:

Client kết nối đến máy chủ thông qua một socket, sử dụng địa chỉ IP và cổng được chỉ định (SERVER_IPSERVER_PORT).

– Gửi dữ liệu tới máy chủ:

Client yêu cầu người dùng nhập một số nguyên từ bàn phím.

Sau khi nhận được số từ người dùng, client gửi số này tới máy chủ thông qua kết nối socket.

– Nhận kết quả từ máy chủ:

Client nhận kết quả từ máy chủ thông qua kết nối socket. Kết quả này được gửi từ máy chủ sau khi kiểm tra số nhập vào.

 – Hiển thị kết quả:

Sau khi nhận được kết quả từ máy chủ, client in ra kết quả này trên màn hình.

public class Client {
    
    public final static int SERVER_PORT = 9555;
    public final static String SERVER_IP = "localhost";
    
    public static void main(String[] args) {
        try {
            System.out.println("Connecting to Server");
            
            Socket socket = new Socket(SERVER_IP, SERVER_PORT);
            
            boolean status = socket.isConnected();
            if(status){
                System.out.println("Server Connected!");
                
                Scanner sc = new Scanner(System.in);
                System.out.println("Nhap n: ");
                int number = sc.nextInt();
                
                //Gui n len server
                PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
                out.println(number);
                
                //Nhan ket qua tu Server
                Scanner in = new Scanner(socket.getInputStream());
                String result = "";
                result = in.nextLine();
                
                System.out.println(result);
                
            }else{
                System.out.println("Connect Fail!");
            }
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}

Trên đây là chương trình cho phép người dùng nhập một số nguyên từ bàn phím, gửi số này tới máy chủ để kiểm tra xem số đó có phải là số hoàn hảo hay không và in ra kết quả trả về từ máy chủ. Cảm ơn bạn đã tham khảo bài tập lập trình mạng trên ttnguyen.net.

Bài viết liên quan:

ứng dụng chat client server java socket

so sánh mô hình tcp/ip và mô hình osi

Lớp URL trong java

InetAddress trong java

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em