Enviar un mensaje entre un cliente y un servidor con corrutinas y Executors en Kotlin de la forma más simple
Servidor
[crayon-6a619f88a54a2576225771/]
import kotlinx.coroutines.*: Importa las clases y funciones relacionadas con corutinas en Kotlin. Esto incluye las funcionesrunBlocking,launch, y el contextoDispatchers.import java.net.ServerSocket: Importa la claseServerSocketpara manejar las conexiones del servidor.fun main() = runBlocking {: Define la función principal del programa.runBlockinges una función de las corutinas que crea un bloque de corutinas y espera a que todas las corutinas lanzadas dentro de ese bloque se completen antes de continuar.val serverSocket = ServerSocket(12345): Crea un objetoServerSocketque escucha en el puerto 12345.println("Servidor esperando conexiones en el puerto 12345..."): Imprime un mensaje en la consola indicando que el servidor está esperando conexiones en el puerto 12345.while (true) {: Inicia un bucle infinito que aceptará conexiones de clientes continuamente.val clienteSocket = serverSocket.accept(): Espera y acepta una conexión de un cliente, devolviendo un objetoSocketpara la comunicación con ese cliente.println("Cliente conectado desde: ${clienteSocket.inetAddress.hostAddress}"): Imprime la dirección IP del cliente conectado.launch(Dispatchers.IO) {: Inicia una nueva corutina en el contexto de entrada/salida (IO) para manejar la comunicación con el cliente. Esto permite operaciones de entrada/salida sin bloquear el hilo principal.val palabraRecibida = clienteSocket.getInputStream().bufferedReader().readLine(): Lee una línea desde el flujo de entrada del cliente (el mensaje enviado por el cliente).println("Palabra recibida: $palabraRecibida"): Imprime la palabra recibida en la consola.clienteSocket.close(): Cierra el socket del cliente después de manejar la comunicación.
Cliente
[crayon-6a619f88a54a7325592259/]