Auf Client-UDP-Socket in Go @ schreib

Ich suche eine gute Lösung für eine Client / Server-Kommunikation mit UDP-Sockets in Go-Sprache.

Die im Internet gefundenen Beispiele zeigen, wie ich Daten an den Server sende, aber sie lehren nicht, wie ich sie an den Client zurücksende.

Um dies zu demonstrieren, führt mein Programm Folgendes aus:

Mein Client-Programm erstellt einen Socket auf dem 4444-Port, wie folgt:

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

Ich habe eine Zeichenfolge und die lokale Adresse an den Server gesendet, damit dieser die Zeichenfolge drucken und eine OK-Nachricht senden kann. Ich benutze dafür gob:

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

Meine Datenstruktur sieht folgendermaßen aus:

type Data struct{
    Msg string
    Addr string
}

Mein Server hört auf den 4444-Port und decodiert den Gob korrekt, aber wie kann ich die OK-Nachricht zurücksenden? Ich verwende dazu die Client-Adresse (auf der Server-GO-Datei):

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

Dann erhalte ich einen Fehlercode:

write udp 127.0.0.1:35290: connection refused

Wenn der Client versucht, eine Verbindung zum Port 4444 des Servers herzustellen, erstellt der Client einen Port mit einer Zufallszahl (in diesem Fall 35290), damit er kommunizieren kann. Ich weiß, dass ich die Adresse des Clients nicht an den Server übergeben sollte, aber conn.RemoteAddress () funktioniert nicht. Eine Lösung, die die Adresse des Kunden erkennt, wäre sehr willkommen.

Obs .: Ich weiß, dass es ReadFromUDP gibt, damit ich das Paket lesen kann. Soll ich es lesen, die Adresse des Kunden ermitteln und die Daten an Gob senden, damit er sie entschlüsseln kann?