Servidor
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import kotlinx.coroutines.* import java.net.ServerSocket fun main() = runBlocking { val serverSocket = ServerSocket(12345) println("Servidor esperando conexiones en el puerto 12345...") while (true) { val clienteSocket = serverSocket.accept() println("Cliente conectado desde: ${clienteSocket.inetAddress.hostAddress}") launch(Dispatchers.IO) { val palabraRecibida = clienteSocket.getInputStream().bufferedReader().readLine() println("Palabra recibida: $palabraRecibida") clienteSocket.close() } } } |
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
|
1 2 3 4 5 6 7 8 9 10 11 12 |
import java.net.Socket import java.io.OutputStream fun main() { val palabraAEnviar = "Hola" val clienteSocket = Socket("localhost", 12345) clienteSocket.getOutputStream().write("$palabraAEnviar\n".toByteArray()) println("Palabra enviada al servidor: $palabraAEnviar") clienteSocket.close() } |

