package stage3 import ( "fmt" "net" "net/netip" "runtime/debug" ) func RunClient(serverAddrStr string) { defer func() { if r := recover(); r != nil { fmt.Printf("%v", r) debug.PrintStack() } }() iface, err := openInterface(network, clientIP, netName) must(err) myAddr, err := net.ResolveUDPAddr("udp", fmt.Sprintf(":%d", port)) must(err) conn, err := net.ListenUDP("udp", myAddr) must(err) serverAddr, err := netip.ParseAddrPort(fmt.Sprintf("%s:%d", serverAddrStr, port)) must(err) _, err = conn.WriteToUDPAddrPort([]byte{1, 2, 3, 4, 5, 6, 7, 8}, serverAddr) must(err) go readFromIFace(iface, conn, clientIP, serverIP, serverAddr) readFromConn(iface, conn, serverIP) }