Escribir al cliente UDP Socket en Go

Estoy buscando una buena solución para una comunicación cliente / servidor con sockets UDP en lenguaje Go.

Los ejemplos que encontré en Internet me muestran cómo enviar datos al servidor, pero no enseñan cómo devolverlos al cliente.

Para demostrarlo, mi programa hace lo siguiente:

Mi programa cliente crea un socket en el puerto 4444, así:

con, err := net.Dial("udp", "127.0.0.1:4444")

Envié una cadena y la dirección local al servidor, para que pudiera imprimir la cadena y enviar un mensaje de OK. Estoy usando gob para esto:

enc := gob.NewEncoder(con)
enc.Encode(Data{"test", con.LocalAddr().String()})

Mi estructura de datos se ve así:

type Data struct{
    Msg string
    Addr string
}

Mi servidor escucha el puerto 4444 y decodifica el Gob correctamente, pero ¿cómo puedo devolver el mensaje OK? Estoy usando la dirección del cliente para hacerlo (en el archivo .go del servidor):

con, err := net.Dial("udp", data.Addr)

Entonces, recibo un código de error:

write udp 127.0.0.1:35290: connection refused

Cuando el cliente intenta conectarse al puerto 4444 del servidor, crea un puerto con un número aleatorio (en este caso, 35290) para que puedan comunicarse. Sé que no debería pasar la dirección del cliente al servidor, pero conn.RemoteAddress () no funciona. Una solución que descubra la dirección del cliente sería muy apreciada.

Obs .: Sé que hay ReadFromUDP, así que puedo leer el paquete. ¿Debería leerlo, descubrir la dirección del cliente y enviar los datos a Gob para que pueda decodificarlo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta