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

Обмен строками по TCP в Java

Полный цикл в одном процессе: фоновый поток ждет accept(), основной поток открывает Socket на localhost и номер из getLocalPort(). Сначала клиент пишет строку, затем читает ответ, порядок важен, иначе стороны ждут друг друга.

Ответ сервера попадает в консоль через System.out.println на клиенте после readLine() на потоке ввода сокета:

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()) ); input.readLine(); output.write("status: done"); output.newLine(); output.flush(); } catch (Exception e) { throw new RuntimeException(e); } }); worker.start(); try (Socket client = new Socket("localhost", port)) { BufferedWriter output = new BufferedWriter( new OutputStreamWriter(client.getOutputStream()) ); BufferedReader input = new BufferedReader( new InputStreamReader(client.getInputStream()) ); output.write("go"); output.newLine(); output.flush(); System.out.println(input.readLine()); } } } }

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

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("heard: " + line); output.newLine(); output.flush(); } catch (Exception e) { throw new RuntimeException(e); } }); worker.start(); try (Socket client = new Socket("localhost", port)) { BufferedWriter output = new BufferedWriter( new OutputStreamWriter(client.getOutputStream()) ); BufferedReader input = new BufferedReader( new InputStreamReader(client.getInputStream()) ); output.write("wave"); output.newLine(); output.flush(); System.out.println(input.readLine()); } } } }

Клиент отправляет "start" и печатает ответ "begin: start", который формирует сервер.

В консоли клиента после обмена должна быть строка "ok", если сервер получил "check".

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