github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/00_net/udp/example_1/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "github.com/AsynkronIT/goconsole" 6 "github.com/prometheus/common/log" 7 "net" 8 ) 9 10 func server() { 11 addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8888") 12 if err != nil { 13 log.Fatal(err) 14 } 15 16 conn, err := net.ListenUDP("udp", addr) 17 fmt.Printf("Local: <%s> \n", conn.LocalAddr().String()) 18 19 data := make([]byte, 1024) 20 21 for { 22 n, remoteAddr, err := conn.ReadFromUDP(data) 23 if err != nil { 24 fmt.Printf("error during read: %s", err) 25 } 26 fmt.Printf("server : rsv <%s> %s\n", remoteAddr, data[:n]) 27 28 _, err = conn.WriteToUDP([]byte("world"), remoteAddr) 29 if err != nil { 30 fmt.Printf(err.Error()) 31 } 32 } 33 } 34 35 func client() { 36 sip := net.ParseIP("127.0.0.1") 37 38 srcAddr := &net.UDPAddr{IP: net.IPv4zero, Port: 0} 39 dstAddr := &net.UDPAddr{IP: sip, Port: 8888} 40 41 conn, err := net.DialUDP("udp", srcAddr, dstAddr) 42 if err != nil { 43 log.Fatal(err) 44 } 45 defer conn.Close() 46 _, err = conn.Write([]byte(`hello`)) 47 if err != nil { 48 log.Fatal(err) 49 } 50 fmt.Printf("<%s>\n", conn.RemoteAddr()) 51 data := make([]byte, 1024) 52 n, err := conn.Read(data) 53 fmt.Printf("client :read %s from <%s>\n", data[:n], conn.RemoteAddr()) 54 55 } 56 57 func main() { 58 59 go server() 60 61 client() 62 63 console.ReadLine() 64 }