package main import ( "flag" "log" "net" ) var ( me = flag.String("me", "", "my local address") peer = flag.String("peer", "", "peer address") ) func mustResolveUDPAddr(s string) *net.UDPAddr { a, err := net.ResolveUDPAddr("udp4", s) if err != nil { log.Panicf("resolve addr:%s err:%v", s, err) } return a } func mustListenUDP(a *net.UDPAddr) *net.UDPConn { c, err := net.ListenUDP("udp4", a) if err != nil { log.Panicf("listenudp addr:%v err:%v", a, err) } return c } func main() { flag.Parse() c := mustListenUDP(mustResolveUDPAddr(*me)) if *peer != "" { go func(a *net.UDPAddr) { b := []byte("abc") n, err := c.WriteToUDP(b, a) if err != nil || n != len(b) { log.Panicf("writetoudp addr:%v err:%v n:%d", a, err, n) } }(mustResolveUDPAddr(*peer)) } b := make([]byte, 10) _, _, err := c.ReadFromUDP(b) if err != nil { log.Panicf("readfromudp err:%v", err) } }