Ответ
Сокет (Socket) — это конечная точка для двустороннего обмена данными между процессами по сети, абстрагирующая низкоуровневые детали сетевого взаимодействия. В Java для работы с TCP используются классы java.net.Socket (клиент) и java.net.ServerSocket (сервер).
Ключевые особенности:
- Работает на транспортном уровне (TCP для надежных потоковых соединений или UDP для датаграмм).
- Поддерживает блокирующий (стандартный) и неблокирующий (через NIO) режимы ввода-вывода.
- Требует явного освобождения ресурсов методом
close().
Пример TCP-сервера:
// Сервер ожидает подключений на порту 8080
ServerSocket serverSocket = new ServerSocket(8080);
Socket clientSocket = serverSocket.accept(); // Блокируется до подключения клиента
// Получение потока для чтения данных от клиента
InputStream in = clientSocket.getInputStream();
// ... чтение данных
serverSocket.close();
Пример TCP-клиента:
// Клиент подключается к серверу localhost на порт 8080
Socket socket = new Socket("localhost", 8080);
// Получение потока для отправки данных на сервер
OutputStream out = socket.getOutputStream();
// ... запись данных
socket.close();
Почему это важно: Сокеты — это фундаментальный низкоуровневый API для сетевого программирования. Для UDP используется класс DatagramSocket. В современных приложениях часто применяют высокоуровневые альтернативы (HTTP-клиенты, WebSockets, gRPC), которые внутри могут использовать сокеты.