first commit
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user