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 claseServerSocket
para manejar las conexiones del servidor.fun main() = runBlocking {
: Define la función principal del programa.runBlocking
es 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 objetoServerSocket
que 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 objetoSocket
para 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() } |