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

Несколько сообщений в Kotlin

Одно TCP-соединение может передать несколько строк подряд: каждая заканчивается переводом строки, как при одиночной отправке. Сервер читает в цикле, пока readLine возвращает текст.

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

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 -> while (true) { val line = input.readLine() ?: break output.write("ack: $line") output.newLine() output.flush() } } } } }.start() Socket("localhost", port).use { client -> client.getOutputStream().bufferedWriter() .use { output -> client.getInputStream().bufferedReader() .use { input -> val lines = listOf( "one", "two", "three", ) for (line in lines) { output.write(line) output.newLine() output.flush() } output.close() repeat(3) { println(input.readLine()) } } } } } }

Клиент читает три ответа ack: ... после закрытия записи. Сервер отвечает на каждую строку отдельно, пока поток ввода не оборвется:

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 -> var count = 0 while (true) { val line = input.readLine() ?: break count++ println("line $count: $line") } } } }.start() Socket("localhost", port).use { client -> client.getOutputStream().bufferedWriter() .use { output -> repeat(3) { index -> output.write("part-$index") output.newLine() output.flush() } output.close() } } } }

Три строки "a", "b", "c" уходят с клиента; сервер печатает каждую с префиксом "item: ", затем клиент закрывает запись.

Клиент после трёх строк "n1", "n2", "n3" читает три ответа "got n1", "got n2", "got n3" и выводит их в консоль.

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