Wenn der PHP-Editor Yuzai die UDP-Wählfunktion verwendet, kann die Fehlermeldung „UDP-Wählen fehlgeschlagen: Die Adresse wurde verwendet“ angezeigt werden. Dieser Fehler wird normalerweise dadurch verursacht, dass der Netzwerkport von einer anderen Anwendung belegt ist. Es gibt viele Möglichkeiten, dieses Problem zu lösen. Sie können die Anwendungen herausfinden, die den Port belegen, indem Sie die Liste der aktuell ausgeführten Programme anzeigen und sie schließen. Sie können auch versuchen, die Porteinstellungen des Dialers zu ändern, um Konflikte mit bereits belegten Ports zu vermeiden. Kurz gesagt: Solange geeignete Maßnahmen entsprechend der jeweiligen Situation ergriffen werden, kann dieses Problem gelöst und die UDP-Einwahl erfolgreich abgeschlossen werden.
Ich schreibe ein Programm, um einen UDP-Server zu erhalten. Es funktioniert, wenn ich den Server zum ersten Mal bekomme.
Aber wenn ich das Programm zum zweiten Mal betrete. Dies gab mir diesen Fehler
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)) } }
Ich glaube, das ist passiert, weil ich den Client zweimal verwendet habe.
Aber warum führt dies zu „Adresse bereits verwendet“
Ich werde den Client nicht neu erstellen.
Lösungen, die ich ausprobiert habe
Eine der Lösungen könnte darin bestehen, den Client auf Null zu setzen.
Auf Null setzen, um einen zufälligen Port zu generieren.
Aber in meinem Fall benötige ich einen festen Port und eine feste Netzwerkadresse.
Das ist also nicht die Lösung.
Stellen Sie einfach die Verbindung her, bevor Sie eine Schleife erstellen:
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)) } }
Das obige ist der detaillierte Inhalt vonUDP-Einwahl fehlgeschlagen: Adresse bereits verwendet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!