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


