Как в Java установить удаленное соединение с сервером?

«Как в Java установить удаленное соединение с сервером?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Java для удаленного подключения используются разные API в зависимости от протокола.

Основные протоколы и инструменты:

Протокол Типичное использование Ключевой Java-класс/Библиотека
HTTP/HTTPS REST API, веб-сервисы HttpURLConnection, HttpClient (Java 11+)
TCP/IP (сокеты) Кастомные протоколы, чаты Socket, ServerSocket
SSH Удаленное управление сервером JSch библиотека
RMI Распределенные Java-приложения java.rmi пакет

Пример 1: TCP-соединение с помощью Socket.

try (Socket socket = new Socket("example.com", 8080);
     OutputStream out = socket.getOutputStream();
     InputStream in = socket.getInputStream()) {
    // Отправка данных
    String message = "Hello, Server!";
    out.write(message.getBytes(StandardCharsets.UTF_8));
    out.flush();
    // Чтение ответа
    byte[] buffer = new byte[1024];
    int bytesRead = in.read(buffer);
    System.out.println("Ответ: " + new String(buffer, 0, bytesRead));
} catch (IOException e) {
    e.printStackTrace();
}

Пример 2: Подключение по SSH с JSch.

import com.jcraft.jsch.*;
JSch jsch = new JSch();
Session session = jsch.getSession("username", "hostname", 22);
session.setPassword("password");
session.setConfig("StrictHostKeyChecking", "no"); // Для теста (в prod используйте known_hosts)
session.connect();
// Теперь можно открыть Channel для выполнения команд
ChannelExec channel = (ChannelExec) session.openChannel("exec");
channel.setCommand("ls -la");
channel.connect();
// ... чтение вывода команды
channel.disconnect();
session.disconnect();