Implementación de NetCAD como Cliente TCP en Go
Clase 16 de 19 • Curso de Go Avanzado: Concurrencia y Patrones de Diseño
Contenido del curso
Concurrencia
- 2

Condiciones de Carrera en Programación Concurrente con Go
04:52 min - 3

Evitar Condiciones de Carrera en Go con Mutex y WaitGroup
11:26 min - 4

Lectura y Escritura Concurrente en Go con RWMutex
06:15 min - 5

Creación de un Sistema de Caché Concurrente en Go
14:29 min - 6

Manejo de Condiciones de Carrera en Go: Implementación de Mutex
08:52 min - 7

Cache concurrente en Go para cálculos intensivos de Fibonacci
16:31 min
Patrones de diseño
- 8

Patrones de Diseño en Programación Orientada a Objetos con Go
04:53 min - 9

Patrón de Diseño Factory en Go: Creación y Uso Práctico
15:17 min - 10

Implementación de Singleton en Go para Conexiones de Base de Datos
08:48 min - 11

Patrón de Diseño Adapter en Go: Implementación Práctica
09:51 min - 12

Patrón de Diseño Observer en Go: Implementación Práctica
11:59 min - 13

Implementación del Patrón de Diseño Strategy en Go
08:53 min
Net
- 14

Escaneo de Puertos TCP con Go: Introducción Básica
07:45 min - 15

Concurrencia en Go: Escáner de Puertos Eficiente y Personalizable
09:16 min - 16

Implementación de NetCAD como Cliente TCP en Go
Viendo ahora - 17

Construcción de Back End para Servidor de Chat en Go
16:08 min - 18

Implementación de un Servidor de Chat en Go con TCP
13:54 min
Conclusión
¿Qué es NetCAD y cómo se implementa?
Crear un proyecto utilizando NetCAD es una oportunidad magnífica para aprender sobre conexiones de red y la transmisión de datos. NetCAD es una herramienta que permite escribir y leer a través de conexiones TCP o UDP, mostrándolo en una consola. En este proyecto, NetCAD funcionará como cliente para un servidor de chat, permitiendo el intercambio de mensajes.
¿Cómo se inicia la implementación de NetCAD?
Primero, creamos un nuevo archivo llamado netcad.go dentro de la carpeta net. Definimos el paquete principal con package main y creamos la función main, que establecerá una conexión usando el protocolo TCP.
package main
import (
"flag"
"fmt"
"log"
"net"
"os"
"os/exec"
)
func main() {
// Definición de flags para host y puerto
port := flag.Int("p", 3090, "el puerto")
host := flag.String("h", "localhost", "el host")
flag.Parse()
// Creación de la conexión TCP
connection, err := net.Dial("tcp", fmt.Sprintf("%s:%d", *host, *port))
if err != nil {
log.Fatal(err)
}
defer connection.Close()
// Canal de control para manejo de concurrencia
done := make(chan struct{})
go func() {
io.Copy(os.Stdout, connection)
done <- struct{}{}
}()
// Llamada a la función copyContent
copyContent(connection, os.Stdin)
<-done
}
// Función para copiar contenido entre el lector y el escritor
func copyContent(dst net.Conn, src io.Reader) {
if _, err := io.Copy(dst, src); err != nil {
log.Fatal(err)
}
}
¿Cómo se configura y utiliza la función main?
En la función main, se definen dos parámetros importantes mediante flags: el host y el port.
- Host: Se representa con el flag
-hy por defecto eslocalhost. - Puerto: Se configura con
-py su valor por defecto es3090.
Estos flags permiten que los parámetros sean personalizables durante la ejecución del programa. Una vez establecidos, se establece la conexión. En caso de error, el programa termina su ejecución mediante log.Fatal(). Si no hay error, el programa procede a crear un canal que permitirá manejar las operaciones concurrentes.
¿Cómo se gestionan las operaciones concurrentes y el control de flujo?
La función anónima dentro de main se encarga de leer todo lo que se recibe a través de la conexión y mostrarlo en la consola. Utiliza io.Copy, que es una función eficiente del paquete io en Go, para copiar datos de un Reader a un Writer. Aquí, la consola actúa como el Writer y la conexión como el Reader.
Además, se envía un struct vacío a un canal para señalar que la lectura ha terminado. Esto es crucial para saber cuándo desbloquear el programa.
¿Qué sigue después de implementar NetCAD?
Finalmente, debemos recordar que NetCAD aun no está completo sin un servidor al cual conectarse. En las próximas etapas del proyecto, nos enfocaremos en construir el servidor que complementará a NetCAD, permitiendo una interacción bidireccional con el cliente/NetCAD.
Implementar NetCAD es un paso importante para adquirir experiencia en programación concurrente y manejo de conexiones en Go. No obstante, entender cómo crear y gestionar correctamente tanto el cliente como el servidor es clave para el éxito del proyecto. ¡Sigue adelante, sigue aprendiendo y completa tu proyecto con éxito!