Use the net package to create a UDPAddr and a UDPConn for both the server and client. The server listens on a port and reads datagrams, while the client writes datagrams to the server's address.
package main
import (
"fmt"
"log"
"net"
)
func main() {
// Server
addr, err := net.ResolveUDPAddr("udp", ":8080")
if err != nil {
log.Fatal(err)
}
conn, err := net.ListenUDP("udp", addr)
if err != nil {
log.Fatal(err)
}
defer conn.Close()
buf := make([]byte, 1024)
for {
n, clientAddr, err := conn.ReadFromUDP(buf)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Received from %s: %s\n", clientAddr, string(buf[:n]))
conn.WriteToUDP([]byte("Hello Client"), clientAddr)
}
}
package main
import (
"fmt"
"log"
"net"
)
func main() {
// Client
addr, err := net.ResolveUDPAddr("udp", "localhost:8080")
if err != nil {
log.Fatal(err)
}
conn, err := net.DialUDP("udp", nil, addr)
if err != nil {
log.Fatal(err)
}
defer conn.Close()
_, err = conn.Write([]byte("Hello Server"))
if err != nil {
log.Fatal(err)
}
buf := make([]byte, 1024)
n, err := conn.Read(buf)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Received: %s\n", string(buf[:n]))
}