Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpSoInr 300 of 322 menu
◀ ▶

Введение в TCP-сокеты в Java

Два процесса на разных машинах или на одной могут обмениваться данными по TCP: канал держится открытым, пока стороны не закроют сокеты. Для учебных примеров достаточно JDK без сторонних библиотек, классы лежат в java.net.

На стороне сервера ServerSocket слушает номер порта на машине; клиент обращается к паре "хост:порт", чаще всего к localhost при локальной проверке. После установки связи обе стороны читают и пишут один непрерывный поток байтов, текст удобно передавать построчно через BufferedReader и BufferedWriter.

В учебном примере сервер и клиент живут в одном main: прослушивание порта уходит в отдельный Thread, а клиент подключается к тому же процессу. Порт 0 при создании ServerSocket означает «любой свободный»; фактический номер берут из getLocalPort(). Сокеты закрывают через try-with-resources, чтобы освободить ресурс после обмена:

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class Main { public static void main(String[] args) throws Exception { try (ServerSocket server = new ServerSocket(0)) { int port = server.getLocalPort(); Thread worker = new Thread(() -> { try (Socket peer = server.accept()) { BufferedReader input = new BufferedReader( new InputStreamReader(peer.getInputStream()) ); BufferedWriter output = new BufferedWriter( new OutputStreamWriter(peer.getOutputStream()) ); String line = input.readLine(); output.write("reply: " + line); output.newLine(); output.flush(); } catch (Exception e) { throw new RuntimeException(e); } }); worker.start(); try (Socket client = new Socket("localhost", port)) { BufferedWriter out = new BufferedWriter( new OutputStreamWriter(client.getOutputStream()) ); BufferedReader in = new BufferedReader( new InputStreamReader(client.getInputStream()) ); out.write("hello socket"); out.newLine(); out.flush(); System.out.println(in.readLine()); } } } }

Клиент отправляет одну строку hello socket, сервер отвечает строкой с префиксом reply:. В консоли появляется ответ сервера, весь обмен укладывается в один запуск.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить