Gravar no soquete UDP do cliente no Go

Estou procurando uma boa solução para uma comunicação cliente / servidor com soquetes UDP no idioma Go.

Os exemplos que encontrei na Internet me mostram como enviar dados para o servidor, mas eles não ensinam como enviá-los de volta ao cliente.

Para demonstrar, meu programa faz o seguinte:

Meu programa cliente cria um soquete na porta 4444, assim:

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

Enviei uma sequência e o endereço local para o servidor, para que ela pudesse imprimir a sequência e enviar uma mensagem OK. Estou usando o gob para isso:

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

Minha estrutura de dados se parece com isso:

type Data struct{
    Msg string
    Addr string
}

Meu servidor escuta a porta 4444 e decodifica o Gob corretamente, mas como posso enviar a mensagem OK de volta? Estou usando o endereço do cliente para fazer isso (no arquivo .go do servidor):

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

Então, recebo um código de erro:

write udp 127.0.0.1:35290: connection refused

Quando o cliente tenta se conectar à porta 4444 do servidor, ele cria uma porta com um número aleatório (nesse caso, 35290) para que eles possam se comunicar. Eu sei que não deveria passar o endereço do cliente para o servidor, mas conn.RemoteAddress () não funciona. Uma solução que descubra o endereço do cliente seria muito apreciada.

Obs .: Eu sei que existe ReadFromUDP, para que eu possa ler o pacote. Devo lê-lo, descobrir o endereço do cliente e enviar os dados ao Gob para que ele possa decodificá-lo?

questionAnswers(1)

yourAnswerToTheQuestion