UDP协议

UDP协议中文名称使用户数据报协议。UDP是一种无连接的传输层协议不需要建立连接就可以直接进行数据发送和接受,属于不可靠的,没有时序的通信。但是UDP实时性比较好,通常用于视频直播相关领域

服务端

```go package main

import ( “fmt” “net” )

//UDP协议 func main() {

  1. //chu
  2. listen, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4(0, 0, 0, 0),
  3. Port: 30000})
  4. if err != nil {
  5. fmt.Println("err:", err)
  6. return
  7. }
  8. defer listen.Close() //关闭监听
  9. for true {
  10. var bf [1024]byte
  11. udp, addr, err := listen.ReadFromUDP(bf[:]) //接受UDP数据
  12. if err != nil {
  13. fmt.Println("read udp failed,err", err)
  14. continue
  15. }
  16. fmt.Printf("data:%v,addr:%v", string(bf[:udp]), addr)
  17. //写入数据
  18. _, err = listen.WriteToUDP(bf[:udp], addr)
  19. if err != nil {
  20. fmt.Println("write udp error", err)
  21. continue
  22. }
  23. }

}

  1. > > <a name="efc6882b"></a>
  2. #### 客户端
  3. > ```go
  4. package main
  5. import (
  6. "fmt"
  7. "net"
  8. )
  9. func main() {
  10. //开启通道
  11. socket, err := net.DialUDP("udp", nil, &net.UDPAddr{IP: net.IPv4(0, 0, 0, 0),
  12. Port: 30000})
  13. if err != nil {
  14. fmt.Println("err:", err)
  15. return
  16. }
  17. defer socket.Close() //关闭连接
  18. sendData := []byte("hello server")
  19. _, err = socket.Write(sendData)
  20. if err != nil {
  21. fmt.Println("发送数据失败", err)
  22. return
  23. }
  24. data := make([]byte, 4096)
  25. udp, addr, err := socket.ReadFromUDP(data) //接收数据
  26. if err != nil {
  27. fmt.Println("接受数据失败", err)
  28. return
  29. }
  30. fmt.Printf("recv:%v,addr:%v", string(data[:udp]), addr)
  31. }