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

Обмен строками в Kotlin

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

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

import java.net.ServerSocket import java.net.Socket fun main() { ServerSocket(0).use { server -> val port = server.localPort Thread { server.accept().use { peer -> peer.getInputStream().bufferedReader() .use { input -> peer.getOutputStream() .bufferedWriter().use { output -> input.readLine() output.write("status: done") output.newLine() output.flush() } } } }.start() Socket("localhost", port).use { client -> client.getOutputStream().bufferedWriter() .use { output -> client.getInputStream().bufferedReader() .use { input -> output.write("go") output.newLine() output.flush() println(input.readLine()) } } } } }

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

import java.net.ServerSocket import java.net.Socket fun main() { ServerSocket(0).use { server -> val port = server.localPort Thread { server.accept().use { peer -> peer.getInputStream().bufferedReader() .use { input -> peer.getOutputStream() .bufferedWriter().use { output -> val line = input.readLine() output.write("heard: $line") output.newLine() output.flush() } } } }.start() Socket("localhost", port).use { client -> client.getOutputStream().bufferedWriter() .use { output -> client.getInputStream().bufferedReader() .use { input -> output.write("wave") output.newLine() output.flush() println(input.readLine()) } } } } }

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

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

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