I am writing a Go piece to send json data in multicast udp:
func send(a string, messages chan interface{}) {
addr, err := net.ResolveUDPAddr("udp", a)
CheckError(err)
c, err := net.DialUDP("udp", nil, addr)
CheckError(err)
for {
msg := <-messages
myjson, err := json.Marshal(msg)
if err != nil {
fmt.Println("Error encoding JSON")
return
}
c.Write([]byte(myjson))
time.Sleep(2 * time.Second)
}
}
So my json is converted to an array of bytes to make it work. Here is my "receiver" func:
func serveMulticastUDP(a string, messages chan interface{}) {
addr, err := net.ResolveUDPAddr("udp", a)
CheckError(err)
l, err := net.ListenMulticastUDP("udp", nil, addr)
l.SetReadBuffer(maxDatagramSize)
for {
b := make([]byte, maxDatagramSize)
n, src, err := l.ReadFromUDP(b)
if err != nil {
log.Fatal("ReadFromUDP failed:", err)
}
s := string(b[:n])
messages<-s
log.Println(s)
log.Println(src)
log.Println(n)
}
}
How to convert byte array to map [string] interface (json)?
source
share