package main import ( "flag" "fmt" "net" "os" ) func main() { //180.177.2.133 TW //124.244.86.40 HK ip := flag.String("ip", "180.177.2.133:62531", "IP address to send and receive UDP packets") port := flag.Int("port", 8890, "Port to send and receive UDP packets") flag.Parse() if *ip == "" { fmt.Println("IP address is required") os.Exit(1) } addr := net.UDPAddr{ IP: net.ParseIP(*ip), Port: *port, } conn, err := net.DialUDP("udp", nil, &addr) if err != nil { fmt.Printf("Failed to connect to UDP server: %v\n", err) os.Exit(1) } defer conn.Close() localAddr := conn.LocalAddr().(*net.UDPAddr) fmt.Printf("Local address: %s\n", localAddr.String()) message := []byte("Hello UDP Server") go func() { for { _, err := conn.Write(message) if err != nil { fmt.Printf("Failed to send UDP packet: %v\n", err) os.Exit(1) } } }() buffer := make([]byte, 1024) for { n, remoteAddr, err := conn.ReadFromUDP(buffer) if err != nil { fmt.Printf("Failed to read UDP packet: %v\n", err) continue } if remoteAddr.IP.String() == *ip { fmt.Printf("Received UDP packet from %s: %s\n", remoteAddr, string(buffer[:n])) } } }