Добавил:
Только когда поступишь в технический вуз поймешь на сколько ты гуманитарий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

JAVA ДЛЯ ПОТОКОВ ИВБО / ПР-15 / RandomNumberHttpServer

.java
Скачиваний:
0
Добавлен:
15.02.2025
Размер:
3.86 Кб
Скачать
import java.io.*;
import java.net.*;
import java.util.*;

public class RandomNumberHttpServer {
    private static final int PORT = 36; // Порт для сервера
    // ФИО: Василий Пупкин Иванович
    // Шифр: 040418

    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(PORT)) {
            System.out.println("Random Number HTTP Server запущен на порту " + PORT);
            while (true) {
                try (Socket clientSocket = serverSocket.accept()) {
                    handleClient(clientSocket);
                }
            }
        } catch (IOException e) {
            System.err.println("Ошибка запуска сервера: " + e.getMessage());
        }
    }

    private static void handleClient(Socket clientSocket) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream(), "UTF-8"));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(clientSocket.getOutputStream(), "UTF-8"), true);

        String line = in.readLine();
        if (line == null) return;

        String[] requestParts = line.split(" ");
        String method = requestParts[0];
        String path = requestParts[1];

        if (method.equals("GET") && path.startsWith("/random?")) {
            handleRandomNumberRequest(path, out);
        } else if (method.equals("GET") && path.equals("/info")) {
            handleInfo(out);
        } else {
            handleNotFound(out);
        }
    }

    private static void handleRandomNumberRequest(String path, PrintWriter out) {
        try {
            // Извлечение параметров min и max из URL
            String[] params = path.split("\\?")[1].split("&");
            int min = Integer.parseInt(params[0].split("=")[1]);
            int max = Integer.parseInt(params[1].split("=")[1]);

            if (min > max) {
                sendHttpResponse(out, 400, "<h1>400 Bad Request</h1><p>Параметр min не может быть больше max.</p>");
            } else {
                int randomNumber = new Random().nextInt((max - min) + 1) + min;
                sendHttpResponse(out, 200, "<h1>Сгенерированное число</h1><p>" + randomNumber + "</p>");
            }
        } catch (NumberFormatException e) {
            sendHttpResponse(out, 400, "<h1>400 Bad Request</h1><p>Некорректные параметры. Проверьте формат чисел.</p>");
        } catch (Exception e) {
            sendHttpResponse(out, 400, "<h1>400 Bad Request</h1><p>Некорректные параметры.</p>");
        }
    }

    private static void handleInfo(PrintWriter out) {
        // Ответ с ФИО и шифром
        String info = "<h1>Информация о студенте</h1>" +
                "<p>ФИО: Василий Пупкин Иванович</p>" +
                "<p>Шифр: 040418</p>";
        sendHttpResponse(out, 200, info);
    }

    private static void handleNotFound(PrintWriter out) {
        sendHttpResponse(out, 404, "<h1>404 Not Found</h1>");
    }

    private static void sendHttpResponse(PrintWriter out, int statusCode, String body) {
        try {
            byte[] responseBodyBytes = body.getBytes("UTF-8");
            int contentLength = responseBodyBytes.length;

            out.println("HTTP/1.1 " + statusCode + " " + (statusCode == 200 ? "OK" : statusCode == 400 ? "Bad Request" : "Not Found"));
            out.println("Content-Type: text/html; charset=UTF-8");
            out.println("Content-Length: " + contentLength);
            out.println();
            out.println(body);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
}