php小編魚仔在使用UDP撥號功能時,可能會遇到"UDP撥號失敗:地址已使用"的錯誤提示。這個錯誤通常是由於網路連接埠被其他應用程式佔用所導致的。解決這個問題的方法有很多,可以透過查看當前運行的程序列表來找出佔用該端口的應用程序,並關閉它們;也可以嘗試修改撥號程序的端口設置,避免與已被佔用的端口衝突。總之,只要根據具體情況採取相應的措施,就能解決這個問題,從而順利完成UDP撥號。
我正在編寫一個程式來取得 udp 伺服器。當我第一次獲取伺服器時它就可以工作。
但是當我第二次輸入程式時。這給了我這個錯誤
panic: Listen failed:dial udp :8829->:9781: bind: address already in use
程式碼:
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)) } }
我認為發生這種情況是因為我使用了客戶端兩次。
但是為什麼這會導致「地址已在使用中」
我不會重新建立客戶端。
我嘗試過的解決方案
解決方案之一可以將 client 設為 nil。
設定為 nil 將產生隨機連接埠。
但就我而言,我需要固定連接埠和固定網路位址。
所以這不是解決方案。
只需在循環之前建立連接:
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)) } }
以上是UDP 撥號失敗:位址已被使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!