Skip to content

Instantly share code, notes, and snippets.

@urakozz
Last active May 8, 2017 14:53
Show Gist options
  • Save urakozz/4fcdcd3064240a0f93cc1c760bc50e84 to your computer and use it in GitHub Desktop.
Save urakozz/4fcdcd3064240a0f93cc1c760bc50e84 to your computer and use it in GitHub Desktop.
Go broadcast to the network
package main
import (
"log"
"net"
"strconv"
"time"
)
const (
maxDatagramSize = 1<<14
)
func main() {
go ping()
serveUDP(msgHandler)
}
func ping() {
addr, err := net.ResolveUDPAddr("udp", "255.255.255.255:10001")
if err != nil {
log.Fatal(err)
}
c, err := net.DialUDP("udp", nil, addr)
i := 0
for {
i++
c.Write([]byte("hello, world! i=" + strconv.Itoa(i) + "\n"))
time.Sleep(1 * time.Second)
}
}
func msgHandler(src *net.UDPAddr, n int, b []byte) {
log.Println(n, "bytes read from", src)
log.Println(string(b[:n]))
}
func serveUDP(h func(*net.UDPAddr, int, []byte)) {
addr, err := net.ResolveUDPAddr("udp", ":10001")
if err != nil {
log.Fatal(err)
}
l, err := net.ListenUDP("udp", addr)
if err != nil {
log.Fatal(err)
}
l.SetReadBuffer(maxDatagramSize)
b := make([]byte, maxDatagramSize)
for {
n, src, err := l.ReadFromUDP(b)
if err != nil {
log.Fatal("ReadFromUDP failed:", err)
}
h(src, n, b)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment