commit 361efaaec5947b27108371e56f80d58bd4ae2aef Author: kar Date: Wed Sep 3 19:59:56 2025 -0700 first commit diff --git a/net1.go b/net1.go new file mode 100644 index 0000000..cbc7b46 --- /dev/null +++ b/net1.go @@ -0,0 +1,88 @@ +package main + +import ( + "fmt" + "net" + "strings" +) + +func main() { + // vamos a crear el socket que se va a encargar de recibir las conexiones + fmt.Println("Abriendo puerto para permitir la conexion") + listener, err := net.Listen("tcp", "0.0.0.0:4444") + fmt.Println(listener.Addr()) + if err != nil { + fmt.Println("Tienes un error a la hora de abrir el socket") + } + defer listener.Close() + fmt.Println("Iniciando loop") + for { + conn, err := listener.Accept() // usamos el metodo accept del objeto listener para aceptar una conexion + // esa conexion la tratamos como objeto + if err != nil { + fmt.Println("Error al recibir la conexion") + } + fmt.Println("Recibiendo conexion de:", conn.RemoteAddr()) + user := login(conn) + mensaje := string(fmt.Sprintf("Hola %s\n", user)) + _, err = conn.Write([]byte(mensaje)) // usamos el metodo write del objeto conn para enviar un mensaje al cliente + if err != nil { + fmt.Println("Error al enviar mensaje") + } + go handleConnection(conn, user) // creamos una go routine para manejar cada conexion de manera separada + + } +} + +func login(conn net.Conn) string { + _, err := conn.Write([]byte(fmt.Sprintf("Favor de escribir nombre de usuario: "))) + if err != nil { + fmt.Println("Error al enviar mensaje") + } + buf := make([]byte, 1024) + n, err := conn.Read(buf) + data := string(buf[:n]) + user := strings.TrimSpace(data) + fmt.Printf("Se unio el usuario %s \n", user) + return user +} + +func handleConnection(conn net.Conn, user string) { + fmt.Println("Cerrando la conexion") + defer conn.Close() + enviarMensajeCliente(conn, user) + enviarMensajeServer(conn, user) +} + +func enviarMensajeServer(conn net.Conn, user string) { + for { + fmt.Printf("Mensaje: ") + var data string + fmt.Scan(&data) + mensaje := strings.TrimSpace(data) + _, err := conn.Write([]byte(fmt.Sprintf("Mensaje del Server: %s\n", mensaje))) + if err != nil { + fmt.Println("Error al enviar mensaje") + return + } + } +} + +func enviarMensajeCliente(conn net.Conn, user string) { + for { + _, err := conn.Write([]byte(fmt.Sprintf("Mensaje: "))) + if err != nil { + fmt.Println("Error al enviar mensaje") + } + buf := make([]byte, 1024) + n, err := conn.Read(buf) + if err != nil { + fmt.Println("Error al escribir mensaje") + return + } + data := string(buf[:n]) + mensaje := strings.TrimSpace(data) + fmt.Printf("Mensaje de %s: %s\n", user, mensaje) + } + +}