go언어
글 수 53
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에서 실행하여도 같은 결과를 얻을 수 있습니다.