Écrire pour le Client Socket UDP en Aller

Je suis à la recherche d'une bonne solution pour une communication client/serveur avec les sockets UDP dans le langage Go.

Les exemples que j'ai trouvé sur Internet me montrer comment envoyer des données au serveur, mais qu'ils n'enseignent pas comment faire pour les envoyer au client.

À démontrer, mon programme est le suivant:

Mon programme client crée un socket sur le port 4444, comme ceci:

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

J'ai envoyé une chaîne de caractères et l'adresse locale du serveur, de sorte qu'il pourrait imprimer la chaîne et envoyez un message OK. Je suis à l'aide de gob pour cela:

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

Mes Données struct ressemble à ceci:

type Data struct{
    Msg string
    Addr string
}

Mon serveur écoute le port 4444 et décode le Gob correctement, mais comment puis-je envoyer le message OK retour? Je suis l'aide de l'adresse du client (sur le serveur .fichier aller):

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

Puis, je reçois un code d'erreur:

write udp 127.0.0.1:35290: connection refused

Lorsque le client essaie de se connecter au Serveur de port 4444, le client crée un port avec un nombre aléatoire (dans ce cas, 35290) afin qu'ils puissent communiquer. Je sais que je ne devrais pas être en train de passer l'adresse du client vers le serveur, mais les conn.RemoteAddress() ne fonctionne pas. Une solution qui découvre l'adresse du client seraient appréciés.

Obs.: Je sais qu'il est ReadFromUDP, afin que je puisse lire le paquet. Dois-je lire, de découvrir l'adresse du client, et d'envoyer les données au gouvernement burundais de sorte qu'il peut le décoder?

Lire les paquets à l'aide de ReadFromUDP. Utilisez l'adresse retournée à partir de ReadFromUDP à répondre à l'aide de WriteToUDP.
Je pensais à ce sujet, mais comment Gob adaptée dans cette situation?
Coder le gouvernement burundais à une mémoire tampon à l'aide var b bytes.Buffer; err := gob.NewEncoder(&b).Encode(v) et écrire b.Octets() pour la connexion. Décoder les boules à l'aide de err := gob.NewDecoder(bytes.NewReader(p)).Decode(&v) où p est la lecture de données à partir de la connexion.

OriginalL'auteur Aleksandrus | 2014-09-25