Rumah >pembangunan bahagian belakang >Golang >Dail UDP gagal: alamat sudah digunakan
editor php Yuzai mungkin menghadapi mesej ralat "Dail UDP gagal: Alamat telah digunakan" apabila menggunakan fungsi pendailan UDP. Ralat ini biasanya disebabkan oleh port rangkaian yang diduduki oleh aplikasi lain. Terdapat banyak cara untuk menyelesaikan masalah ini Anda boleh mengetahui aplikasi yang menduduki port dengan melihat senarai program yang sedang dijalankan dan menutupnya Anda juga boleh cuba mengubah suai tetapan port pendail untuk mengelakkan konflik dengan port yang telah diduduki. Pendek kata, selagi langkah-langkah yang sesuai diambil mengikut situasi tertentu, masalah ini boleh diselesaikan dan dial-up UDP boleh diselesaikan dengan jayanya.
Saya sedang menulis program untuk mendapatkan pelayan udp. Ia berfungsi apabila saya mula-mula mendapat pelayan.
Tapi bila dah masuk program kali kedua. Ini memberi saya ralat ini
panic: Listen failed:dial udp :8829->:9781: bind: address already in use
Kod:
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)) } }
Saya rasa ini berlaku kerana saya menggunakan pelanggan dua kali.
Tetapi kenapa ini mengakibatkan "Alamat sudah digunakan"
Saya tidak akan mencipta semula pelanggan.
Penyelesaian yang saya cuba
Salah satu penyelesaiannya ialah menetapkan pelanggan kepada sifar.
Tetapkan kepada sifar untuk menjana port rawak.
Tetapi dalam kes saya, saya memerlukan port tetap dan alamat rangkaian tetap.
Jadi ini bukan penyelesaian.
Hanya buat sambungan sebelum menggelung:
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)) } }
Atas ialah kandungan terperinci Dail UDP gagal: alamat sudah digunakan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!