Введение в сокеты в Kotlin
TCP-соединение связывает две программы через сеть.
На стороне сервера класс ServerSocket слушает
номер порта на машине; клиент обращается к паре
"хост:порт", чаще всего к
localhost при локальной проверке. После
установки связи обе стороны читают и пишут один
непрерывный поток байтов - текст удобно передавать
построчно через обертки над потоками ввода-вывода.
В учебном примере сервер и клиент живут в одном
main: прослушивание порта уходит в отдельный
Thread, а клиент подключается к тому же
процессу. Порт 0 при создании
ServerSocket означает «любой свободный»;
фактический номер берут из localPort. Сокеты
закрывают через use, чтобы освободить
ресурс после обмена:
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("reply: $line")
output.newLine()
output.flush()
}
}
}
}.start()
Socket("localhost", port).use { client ->
client.getOutputStream().bufferedWriter()
.use { output ->
client.getInputStream().bufferedReader()
.use { input ->
output.write("hello socket")
output.newLine()
output.flush()
println(input.readLine())
}
}
}
}
}
Клиент отправляет одну строку hello socket,
сервер отвечает строкой с префиксом reply:.
В консоли появляется ответ сервера - весь обмен
укладывается в один запуск без внешних библиотек.