first commit

This commit is contained in:
kar
2025-09-03 19:59:56 -07:00
commit 361efaaec5
+88
View File
@@ -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)
}
}