Golang网络编程UDP

作者: TZX_0710 | 来源:发表于2021-08-05 19:48 被阅读0次

    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)
    }
    
    

    相关文章

      网友评论

        本文标题:Golang网络编程UDP

        本文链接:https://www.haomeiwen.com/subject/knhvvltx.html