udp broadcast는 동일 네트워크망 안에서 모두가 받을 수 있는 메시지를 전송하여 받을 곳의 IP를 알 수 없는 경우에 많이 사용합니다.


broadcast ip는 255를 사용합니다. 즉, 192.168.255.255가 되면 ip가 192.168.xxx.xxx 인 네트워크는 모두 수신이 가능합니다.


우선 서버쪽 코드는 다음과 같습니다.


package main
import (
	"net"
	"log"
)
func main() {
	addr, err := net.ResolveUDPAddr("udp4", "0.0.0.0:5555")
	if err != nil {
		log.Panic(err)
	}

	socket, err := net.ListenUDP("udp4", addr)

	if err != nil {
		log.Panic(err)
	}
	defer socket.Close()

	for {
		data := make([]byte, 4096)
		read, remoteAddr, err := socket.ReadFromUDP(data)
		if err != nil {
			log.Println(err)
		}
		log.Println("S-IN ] " + string(data[:read]) + " from " + remoteAddr.String())
	}
}


클라이언트 코드는 아래와 같습니다.

package main
import (
	"net"
	"log"
)

func main() {
	ServerAddr,err := net.ResolveUDPAddr("udp4","255.255.255.255:5555")
	if err != nil {
		log.Panic(err)
	}

	socket, err := net.DialUDP("udp4", nil, ServerAddr)

	if err != nil {
		log.Panic(err)
	}

	defer socket.Close()

	data := "hello"
	socket.Write([]byte(data))
	log.Println("C-OUT] " + data)
}



실행결과는 아래와 같습니다.


[root@WebConn bin]# ./udp-server &
[1] 1178
[root@WebConn bin]# ./udp-client 
1970/01/01 00:32:51 C-OUT] hello
1970/01/01 00:32:51 S-IN ] hello from 192.168.4.99:35847
[root@WebConn bin]# 



간단히 테스트하기 위해서 로컬에서 server와 client 모두 같은 보드에서 실행하였으나, 다른 보드나 pc에서 실행하여도 같은 결과를 얻을 수 있습니다.