Maison > développement back-end > Golang > Échec de la connexion UDP : adresse déjà utilisée

Échec de la connexion UDP : adresse déjà utilisée

PHPz
Libérer: 2024-02-09 21:27:11
avant
400 Les gens l'ont consulté

UDP 拨号失败:地址已被使用

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.

Contenu de la question

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
Copier après la connexion

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))
    }

}
Copier après la connexion

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.

Solution de contournement

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))
    }

}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal