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?