/
alex_ep0411
/
java_lab7
Обзор
Документация
Войти
/
alex_ep0411
/
java_lab7
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/EchoClient.java
92 строки
5 KB
александр
лабораторная работа 7
08 июн 2026, 13:55
08 июн 2026, 13:55
2faa48e
Код
Авторство
О чём код?
import java.io.*; import java.net.*; import java.nio.charset.StandardCharsets; /** * Клиент для эхо-сервера (вариант 14). * Позволяет: * - подключаться к любому хосту/порту через аргументы командной строки * - читать строки из консоли и отправлять на сервер * - получать ответ и выводить его * - завершать работу по Ctrl+C или при закрытии потока ввода */ public class EchoClient { private static final String DEFAULT_HOST = "localhost"; private static final int DEFAULT_PORT = 12345; public static void main(String[] args) { String host = DEFAULT_HOST; int port = DEFAULT_PORT; // Разбор аргументов командной строки // Использование: java EchoClient [хост [порт]] if (args.length > 0) { host = args[0]; } if (args.length > 1) { try { port = Integer.parseInt(args[1]); } catch (NumberFormatException e) { System.err.println("Неверный порт. Используется порт " + DEFAULT_PORT); port = DEFAULT_PORT; } } System.out.println("=== Эхо-клиент (вариант 14: палиндром) ==="); System.out.println("Подключение к " + host + ":" + port); // try-with-resources для socket и потоков try (Socket socket = new Socket(host, port); BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream(), StandardCharsets.UTF_8)); PrintWriter out = new PrintWriter( new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8), true); BufferedReader consoleReader = new BufferedReader( new InputStreamReader(System.in, StandardCharsets.UTF_8))) { System.out.println("✅ Подключено к серверу " + host + ":" + port); System.out.println("Вводите строки для отправки. Для выхода нажмите Ctrl+C или введите 'exit' и нажмите Enter."); System.out.println("Примеры для тестирования палиндромов: radar, level, java, А роза упала на лапу Азора"); System.out.println("--------------------------------------------------"); String userInput; boolean shouldExit = false; while (!shouldExit && (userInput = consoleReader.readLine()) != null) { // Опциональная команда выхода if ("exit".equalsIgnoreCase(userInput.trim())) { shouldExit = true; System.out.println("Завершение работы клиента..."); break; } // Отправляем строку на сервер out.println(userInput); System.out.println("📤 Отправлено: " + userInput); // Читаем ответ (метод readLine() блокируется) String response = in.readLine(); if (response == null) { System.out.println("❌ Сервер закрыл соединение."); break; } System.out.println("📥 Ответ сервера: " + response); System.out.println(); } } catch (UnknownHostException e) { System.err.println("❌ Неизвестный хост: " + host); System.err.println("Убедитесь, что имя хоста или IP-адрес указаны верно."); } catch (ConnectException e) { System.err.println("❌ Не удалось подключиться к серверу " + host + ":" + port); System.err.println("Проверьте, запущен ли сервер и не блокирует ли его firewall."); } catch (SocketTimeoutException e) { System.err.println("❌ Таймаут соединения с сервером."); } catch (IOException e) { System.err.println("❌ Ошибка ввода-вывода: " + e.getMessage()); } System.out.println("Клиент завершил работу."); } }