Schreiben Client UDP-Socket-in Gehen
Ich bin auf der Suche nach einer guten Lösung für eine client/server-Kommunikation mit UDP-sockets in Go Sprache.
Die Beispiele, die ich im Internet gefunden die mir zeigen, wie Daten an den server senden, aber Sie nicht lehren, wie Sie zu senden an den client zurück.
Demonstrieren, mein Programm macht Folgendes:
Mein client-Programm erzeugt einen socket auf den port 4444, so wie hier:
con, err := net.Dial("udp", "127.0.0.1:4444")
Ich eine Zeichenfolge gesendet und der lokalen Adresse auf dem server, so könnte es drucken Sie den string und senden einer OK-Meldung. Ich bin mit gob für diese:
enc := gob.NewEncoder(con)
enc.Encode(Data{"test", con.LocalAddr().String()})
Meine Daten struct sieht wie folgt aus:
type Data struct{
Msg string
Addr string
}
Meinem server lauscht auf dem port 4444 und decodiert die Klappe richtig, aber wie kann ich senden Sie die OK-Meldung zurück? Ich bin mit der client-Adresse zu tun (auf dem server .go-Datei):
con, err := net.Dial("udp", data.Addr)
Dann bekomme ich einen Fehler-code:
write udp 127.0.0.1:35290: connection refused
Wenn der client versucht, eine Verbindung zu dem Server-port 4444, erstellt der client einen port mit einer zufälligen Zahl (in diesem Fall, 35290), so dass Sie kommunizieren können. Ich weiß, ich sollte nicht sein, vorbei die Adresse des Clients an den server, aber conn.RemoteAddress() funktioniert nicht. Eine Lösung, welche die client-Adresse würde am meisten geschätzt.
Obs.: Ich weiß, es ist ReadFromUDP, so kann ich Lesen Sie die Packungsbeilage. Sollte ich es Lesen, entdecken Sie die client-Adresse, und senden die Daten an Gob, damit er Sie entschlüsseln kann?
- Lesen Sie Pakete, die mit ReadFromUDP. Verwenden Sie die Adresse zurückgegeben, die von ReadFromUDP Antworten mit WriteToUDP.
- Ich war darüber nachzudenken, aber wie würde die Klappe passen in dieser situation?
- Kodieren Sie die Klappe, um einen Puffer mit
var b bytes.Buffer; err := gob.NewEncoder(&b).Encode(v)
und schreiben b.Byte (), um die Verbindung. Decodieren der gobs miterr := gob.NewDecoder(bytes.NewReader(p)).Decode(&v)
wobei p die gelesenen Daten aus der Verbindung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen Sie die unten stehen Beispiele für die client/server-Kommunikation über UDP. Das sendResponse routine zum senden Antwort zurück an den client.
udpclient.gehen
udpserver.gehen
Some error read udp 127.0.0.1:58464->127.0.0.1:1234: read: connection refused
. Würde mir bitte jemand einen Weg vorschlagen, damit es funktioniert? Danke!!!