簡単な UDP client / server in golang
UDP server と client の覚書。Ping を送って Pong と帰ってくるだけの雑なやつ。 特に難しいところもなくこの辺 みながらやると簡単にできる。
server 側
サーバ側では 127.0.0.1:8080 をlisten するようにしている。 何か送られてきたらそれを読んで、送ってきた相手に Pong と返すサーバ。
package main import ( "log" "net" "os" ) func main() { udpAddr := &net.UDPAddr{ IP: net.ParseIP("127.0.0.1"), Port: 8080, } updLn, err := net.ListenUDP("udp", udpAddr) if err != nil { log.Fatalln(err) os.Exit(1) } buf := make([]byte, 1024) log.Println("Starting udp server...") for { n, addr, err := updLn.ReadFromUDP(buf) if err != nil { log.Fatalln(err) os.Exit(1) } go func() { log.Printf("Reciving data: %s from %s", string(buf[:n]), addr.String()) log.Printf("Sending data..") updLn.WriteTo([]byte("Pong"), addr) log.Printf("Complete Sending data..") }() } }
client 側
サーバに対して Pong と送信して、その返信をlogに出力する。
package main import ( "log" "net" "os" ) func main() { conn, err := net.Dial("udp", "127.0.0.1:8080") if err != nil { log.Fatalln(err) os.Exit(1) } defer conn.Close() n, err := conn.Write([]byte("Ping")) if err != nil { log.Fatalln(err) os.Exit(1) } if len(buf) != n { log.Printf("data size is %d, but sent data size is %d", len(buf), n) } recvBuf := make([]byte, 1024) n, err = conn.Read(recvBuf) if err != nil { log.Fatalln(err) os.Exit(1) } log.Printf("Received data: %s", string(recvBuf[:n])) }