Skip to content

Instantly share code, notes, and snippets.

@umitanuki
Last active December 21, 2015 15:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save umitanuki/6326995 to your computer and use it in GitHub Desktop.
Save umitanuki/6326995 to your computer and use it in GitHub Desktop.
Multicast replies in unicast
package main
import "log"
import "net"
import "os"
var gaddr *net.UDPAddr = &net.UDPAddr{IP: net.IPv4(224, 0, 0, 254), Port: 12345}
func listener(c chan int) {
logger := log.New(os.Stdout, "[L]", log.Ltime | log.Lshortfile)
conn, err := net.ListenMulticastUDP("udp", nil, gaddr)
if err != nil {
logger.Fatalf("failed to listen: %s\n", err)
return
}
c <- 1
defer conn.Close()
logger.Printf("laddr = %s", conn.LocalAddr().String())
buf := make([]byte, 512)
_, dest, err := conn.ReadFromUDP(buf)
if err != nil {
logger.Fatalf("failed to read: %s\n", err)
return
}
logger.Printf("read from %s: %s\n", dest.String(), string(buf))
msg := "world"
_, err = conn.WriteToUDP([]byte(msg), dest)
if err != nil {
logger.Fatalf("failed to write: %s\n", err)
}
logger.Printf("end of listener\n")
c <- 1
}
func sender(c chan int) {
logger := log.New(os.Stdout, "[S]", log.Ltime | log.Lshortfile)
<-c
laddr := &net.UDPAddr{IP: net.IPv4(0, 0, 0, 0), Port: 3333}
conn, err := net.DialUDP("udp", laddr, gaddr)
if err != nil {
logger.Fatalf("failed to dial: %s\n", err)
return
}
defer conn.Close()
logger.Printf("laddr = %s", conn.LocalAddr().String())
msg := "hello"
n, err := conn.Write([]byte(msg))
if err != nil {
logger.Fatalf("client failed to write: %s\n", err)
return
}
logger.Printf("%d bytes written\n", n)
buf := make([]byte, 512)
_, remote, err := conn.ReadFrom(buf)
if err != nil {
logger.Fatalf("client failed to read: %s\n", err)
return
}
logger.Printf("client read from %s: %s\n", remote, string(buf))
<-c
}
func main() {
c := make(chan int, 1)
go listener(c)
sender(c)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment