UDP Sample with golang

  • 13793
  • 0
  • go
  • 2021-03-19

UDP Sample with golang

UDP Server

server 收到資料會回傳"message recived!"

UDP Server sample code:

package main

import (
	"fmt"
	"net"
)

func main() {
	src := "0.0.0.0:8001"
	listener, err := net.ListenPacket("udp", src)
	if err != nil {
		fmt.Println(err.Error())
	}
	defer listener.Close()

	fmt.Printf("UDP server start and listening on %s.\n", src)

	for {
		buf := make([]byte, 1024)
		n, addr, err := listener.ReadFrom(buf)
		if err != nil {
			continue
		}
		go serve(listener, addr, buf[:n])

	}
}

func serve(listener net.PacketConn, addr net.Addr, buf []byte) {
	fmt.Printf("%s\t: %s\n", addr, buf)
	listener.WriteTo([]byte("message recived!\n"), addr)
}

UDP Client

對Server說"hello"

UDP Client sample code:

package main

import (
	"fmt"
	"net"
	"time"
)

func main() {
	res, err := sendUDP("127.0.0.1:8001", "hello")
	if err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println(res)
	}
}
func sendUDP(addr, msg string) (string, error) {

	conn, _ := net.Dial("udp", addr)

	// send to socket
	_, err := conn.Write([]byte(msg))

	// listen for reply
	bs := make([]byte, 1024)
	conn.SetDeadline(time.Now().Add(3 * time.Second))
	len, err := conn.Read(bs)
	if err != nil {
		return "", err
	} else {
		return string(bs[:len]), err
	}
}