Golang网络编程UDP
2021-08-05 本文已影响0人
TZX_0710
UDP协议
UDP协议中文名称使用户数据报协议。UDP是一种无连接的传输层协议不需要建立连接就可以直接进行数据发送和接受,属于不可靠的,没有时序的通信。但是UDP实时性比较好,通常用于视频直播相关领域
服务端
package main import ( "fmt" "net" ) //UDP协议 func main() { //chu listen, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4(0, 0, 0, 0), Port: 30000}) if err != nil { fmt.Println("err:", err) return } defer listen.Close() //关闭监听 for true { var bf [1024]byte udp, addr, err := listen.ReadFromUDP(bf[:]) //接受UDP数据 if err != nil { fmt.Println("read udp failed,err", err) continue } fmt.Printf("data:%v,addr:%v", string(bf[:udp]), addr) //写入数据 _, err = listen.WriteToUDP(bf[:udp], addr) if err != nil { fmt.Println("write udp error", err) continue } } }
客户端
package main import ( "fmt" "net" ) func main() { //开启通道 socket, err := net.DialUDP("udp", nil, &net.UDPAddr{IP: net.IPv4(0, 0, 0, 0), Port: 30000}) if err != nil { fmt.Println("err:", err) return } defer socket.Close() //关闭连接 sendData := []byte("hello server") _, err = socket.Write(sendData) if err != nil { fmt.Println("发送数据失败", err) return } data := make([]byte, 4096) udp, addr, err := socket.ReadFromUDP(data) //接收数据 if err != nil { fmt.Println("接受数据失败", err) return } fmt.Printf("recv:%v,addr:%v", string(data[:udp]), addr) }