UDP(User Datagram Protocol)는 비연결 지향 프로토콜이며 전송 계층에서 매우 중요한 프로토콜입니다. 연결을 설정하지 않고 대상 호스트에 직접 데이터를 전송할 수 있으므로 실시간 데이터 전송, 게임 및 기타 응용 프로그램에 널리 사용되며 일부 시나리오에서는 TCP보다 더 적합합니다.
Go 언어에서 UDP 프로그래밍을 사용하는 방법도 매우 간단합니다. 이 글에서는 Go 언어에서 UDP 프로그래밍을 사용하는 방법을 소개합니다.
UDP 프로토콜에서 데이터는 데이터그램이라고도 하는 UDP 패킷으로 캡슐화됩니다. 데이터그램에는 소스 포트 번호, 대상 포트 번호, 길이, 체크섬 및 기타 정보가 포함됩니다.
Go 언어에서는 net 패키지의 UDPConn을 사용하여 UDP 데이터그램을 읽고 쓸 수 있습니다.
UDP 서버 프로그램에서는 먼저 UDP 주소를 만들어야 합니다. 즉, net 패키지의 ResolveUDPAddr 메소드를 사용합니다. 이 메소드는 프로토콜 유형과 서버라는 두 가지 매개변수를 받습니다. 주소.
그런 다음 net 패키지의 ListenUDP 메서드를 사용하여 주소를 수신합니다. 이 메서드는 UDP 데이터그램을 수신하고 보내는 데 사용할 수 있는 UDPConn 개체를 반환합니다.
다음 단계는 데이터그램을 읽는 프로세스입니다. UDPConn 개체의 ReadFromUDP 메서드를 사용하여 클라이언트가 보낸 데이터그램을 읽습니다. 이 메서드는 데이터그램이 수신될 때까지 차단되고 오류 개체와 데이터그램 개체를 반환합니다. 데이터를 읽은 후 데이터를 꺼내어 데이터의 해시값을 계산하는 등 데이터를 처리할 수 있습니다. 그런 다음 UDPConn 개체의 WriteToUDP 메서드를 사용하여 클라이언트에 응답 데이터그램을 보냅니다.
다음은 간단한 UDP 서버 프로그램입니다.
package main import ( "fmt" "net" ) func main() { ip := net.ParseIP("127.0.0.1") addr := &net.UDPAddr{ IP: ip, Port: 8080, } conn, err := net.ListenUDP("udp", addr) if err != nil { fmt.Println(err) return } defer conn.Close() fmt.Println("UDP server listening on port ", addr.Port) for { data := make([]byte, 1024) n, addr, err := conn.ReadFromUDP(data) if err != nil { fmt.Println("Error: ", err) continue } fmt.Printf("Received from %s:%d : %s ", addr.IP.String(), addr.Port, string(data[:n])) reply := []byte("Hello from UDP server") conn.WriteToUDP(reply, addr) } }
UDP 클라이언트 프로그램에서는 먼저 UDP 주소를 만들어야 합니다. 즉, net 패키지에서 ResolveUDPAddr 메서드를 사용하고, 두 개의 매개변수는 프로토콜 유형과 서버 주소입니다.
그런 다음 DialUDP 메서드를 사용하여 서버 주소에 연결하면 UDP 데이터그램을 서버에 보내는 데 사용할 수 있는 UDPConn 개체가 반환됩니다.
다음 단계는 데이터그램을 서버로 보내는 것입니다. UDPConn 개체의 Write 메서드를 사용하여 데이터그램을 서버로 보냅니다.
그런 다음 UDPConn 개체의 ReadFromUDP 메서드를 사용하여 서버에서 응답 데이터그램을 읽습니다. 이 메서드는 데이터그램이 수신될 때까지 차단하고 오류 개체와 데이터그램 개체를 반환합니다. 데이터를 읽은 후 데이터를 꺼낼 수 있습니다.
다음은 간단한 UDP 클라이언트 프로그램입니다.
package main import ( "fmt" "net" ) func main() { ip := net.ParseIP("127.0.0.1") addr := &net.UDPAddr{ IP: ip, Port: 8080, } conn, err := net.DialUDP("udp", nil, addr) if err != nil { fmt.Println(err) return } defer conn.Close() fmt.Printf("UDP client connected to %s:%d ", addr.IP.String(), addr.Port) message := []byte("Hello from UDP client") _, err = conn.Write(message) if err != nil { fmt.Println(err) return } buffer := make([]byte, 1024) n, _, err := conn.ReadFromUDP(buffer) if err != nil { fmt.Println(err) return } fmt.Printf("Response from server: %s ", string(buffer[:n])) }
Go 언어에서 UDP를 사용한 프로그래밍은 UDP 데이터그램을 읽고 쓰려면 net 패키지의 UDPConn 개체만 사용하면 됩니다. 이 기사에서는 UDP 서버 프로그램과 UDP 클라이언트 프로그램을 작성하는 방법을 소개하고 해당 코드 예제를 제공합니다. 실시간 데이터 전송, 게임 및 기타 응용 프로그램을 수행해야 하는 경우 UDP 프로토콜 사용을 고려할 수 있습니다.
위 내용은 Go에서 UDP를 사용하여 프로그래밍하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!