package main import ( "fmt" "net" "log" "os" "strings" ) type localAddr struct { Addr string } //metodo constructor func CreateAddr() *localAddr { return &localAddr { Addr: "192.168.2.10:4444", } } func (la localAddr) BindPort() { listener, err := net.Listen("tcp", la.Addr) if err != nil { log.Println(err) } defer listener.Close() for { conn, err := listener.Accept() if err != nil { log.Println(err) } fmt.Println("\nConexion recibida de ", conn.RemoteAddr()) go handleConnection(conn) } } func handleConnection(conn net.Conn) { defer conn.Close() if len(os.Args) < 1 { fmt.Println("Escribir comando que tenga que realizar el cliente") } else { fmt.Println("Ejecutando", os.Args[1:]) } comando := os.Args[1:] comandoUnido := strings.Join(comando, " ") _, err := conn.Write([]byte(comandoUnido)) if err != nil { fmt.Println("error al enviar orden") } conn.(*net.TCPConn).CloseWrite() buf := make([]byte, 4096) n, err := conn.Read(buf) respuesta := strings.TrimSpace(string(buf[:n])) if err != nil { log.Println(err) } fmt.Printf("Respuesta de %s:\n", conn.RemoteAddr()) fmt.Printf("====================\n") fmt.Printf(respuesta) fmt.Printf("\n====================") } func main() { myBind := CreateAddr() myBind.BindPort() }