Maison >développement back-end >Golang >Échec de la connexion UDP : adresse déjà utilisée
L'éditeur php Yuzai peut rencontrer le message d'erreur "Échec de la numérotation UDP : l'adresse a été utilisée" lors de l'utilisation de la fonction de numérotation UDP. Cette erreur est généralement provoquée par le fait que le port réseau est occupé par une autre application. Il existe de nombreuses façons de résoudre ce problème. Vous pouvez connaître les applications occupant le port en affichant la liste des programmes en cours d'exécution et en les fermant, vous pouvez également essayer de modifier les paramètres de port du numéroteur pour éviter les conflits avec les ports déjà occupés. En bref, tant que des mesures appropriées sont prises en fonction de la situation spécifique, ce problème peut être résolu et la connexion UDP peut être réalisée avec succès.
J'écris un programme pour obtenir le serveur UDP. Cela fonctionne lorsque j'obtiens le serveur pour la première fois.
Mais quand j'entre dans le programme pour la deuxième fois. Cela m'a donné cette erreur
panic: Listen failed:dial udp :8829->:9781: bind: address already in use
Code :
package main import ( "fmt" "log" "net" "os" ) func main() { log.SetFlags(log.Lshortfile) udpServer, err := net.ResolveUDPAddr("udp", ":9781") if err != nil { panic(fmt.Sprint("ResolveUDPAddr failed:", err.Error())) os.Exit(1) } client, err := net.ResolveUDPAddr("udp", ":8829") if err != nil { panic(err) } for { fmt.Printf(">> ") var input string fmt.Scanf("%s", &input) conn, err := net.DialUDP("udp", client, udpServer) if err != nil { panic(fmt.Sprint("Listen failed:", err.Error())) os.Exit(1) } _, err = conn.Write([]byte(input)) if err != nil { panic(fmt.Sprint("Write data failed:", err.Error())) os.Exit(1) } received := make([]byte, 1024) _, err = conn.Read(received) if err != nil { panic(fmt.Sprint("Read data failed:", err.Error())) os.Exit(1) } fmt.Printf("Response: %s\n", string(received)) } }
Je pense que cela est arrivé parce que j'ai utilisé le client deux fois.
Mais pourquoi cela donne-t-il "Adresse déjà utilisée"
Je ne recréerai pas le client.
Solutions que j'ai essayées
Une des solutions peut être de définir le client sur zéro.
Réglé sur zéro pour générer un port aléatoire.
Mais dans mon cas, j'ai besoin d'un port fixe et d'une adresse réseau fixe.
Ce n’est donc pas la solution.
Créez simplement la connexion avant de boucler :
package main import ( "fmt" "log" "net" "os" ) func main() { log.SetFlags(log.Lshortfile) udpServer, err := net.ResolveUDPAddr("udp", ":9781") if err != nil { panic(fmt.Sprint("ResolveUDPAddr failed:", err.Error())) os.Exit(1) } client, err := net.ResolveUDPAddr("udp", ":8829") if err != nil { panic(err) } conn, err := net.DialUDP("udp", client, udpServer) if err != nil { panic(fmt.Sprint("Listen failed:", err.Error())) os.Exit(1) } for { fmt.Printf(">> ") var input string fmt.Scanf("%s", &input) _, err = conn.Write([]byte(input)) if err != nil { panic(fmt.Sprint("Write data failed:", err.Error())) os.Exit(1) } received := make([]byte, 1024) _, err = conn.Read(received) if err != nil { panic(fmt.Sprint("Read data failed:", err.Error())) os.Exit(1) } fmt.Printf("Response: %s\n", string(received)) } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!