首页 > 编程笔记 > Go语言笔记 阅读:11

Go语言UDP通信详解(附带实例)

UDP(user datagram protocol,用户数据报协议)协议是 OSI(open system interconnect,开放式系统互连)参考模型中的一种无连接传输层协议,不需要建立连接就能直接发送和接收数据,属于不可靠的、没有时序的通信。但是,UDP 协议的实时性比较好,通常用于视频直播等相关领域。

Go语言UDP服务器端

在编写 UDP 服务器端时,一般按照如下步骤展开:
下面演示如何编写简单的 UDP 服务端。代码如下:
package main

import (
     "fmt"
     "net"
)

func main() {
     // 使用 net.ListenUDP() 函数监听连接的地址与端口
     conn, err := net.ListenUDP("udp", &net.UDPAddr{
          IP:   net.IPv4(127, 0, 0, 1),
          Port: 3000,
          Zone: "",
     })
     if err != nil {
          fmt.Println("监听失败!发生错误:", err)
          return
     }
     fmt.Println("服务端已开启!等待客户端的连接请求......")

     for {
          var data [1024]byte
          // 接收数据
          count, addr, err := conn.ReadFromUDP(data[:])
          if err != nil {
               fmt.Println("接收数据失败!发生错误:", err)
               continue
          }
          fmt.Printf("已成功接收数据:%s\n", data[:count])

          // 发送数据
          _, errs := conn.WriteToUDP([]byte("你好,客户端!"), addr)
          if errs != nil {
               fmt.Println("发送数据失败!发生错误:", errs)
               continue
          }
     }
}

Go语言UDP客户端

UDP 服务器端编写完毕后,接下来要编写 UDP 客户端。在编写 UDP 客户端时,一般按照如下步骤展开:
下面演示如何编写 UDP 客户端。代码如下:
package main

import (
     "fmt"
     "net"
)

func main() {
     // 建立与服务端的 UDP 连接
     conn, err := net.DialUDP("udp", nil, &net.UDPAddr{
          IP:   net.IPv4(127, 0, 0, 1),
          Port: 3000,
          Zone: "",
     })
     if err != nil {
          fmt.Println("连接失败!发生错误:", err)
          return
     }
     fmt.Println("客户端向服务器端发送连接请求......")
     defer conn.Close()

     // 发送数据
     sendData := []byte("你好,服务器端!")
     _, errs := conn.Write(sendData)
     if errs != nil {
          fmt.Println("发送数据失败!发生错误:", errs)
          return
     }

     // 接收数据
     data := make([]byte, 4096)
     _, _, errors := conn.ReadFromUDP(data)
     if errors != nil {
          fmt.Println("接收数据失败!发生错误:", errors)
          return
     }
     fmt.Printf("已成功接收数据:%s\n", string(data))
}
为了保证上述程序成功运行,要打开两个 VS Code 窗口:一个窗口是 UDP 服务器端,另一个窗口是 UDP 客户端。

先运行 UDP 服务器端,在 UDP 服务端所在 VS Code 窗口的控制台上打印信息:

服务端已开启!等待客户端的连接请求……


再运行 UDP 客户端,在 UDP 客户端所在 VS Code 窗口的控制台上打印如下信息:

客户端向服务器端发送连接请求……
已成功接收数据:你好,客户端!


打开 UDP 服务器端所在的 VS Code 窗口,在控制台上打印一行新信息:

服务器端已开启!等待客户端的连接请求……
已成功接收数据:你好,服务器端!

这说明 UDP 服务器端与 UDP 客户端不仅建立了连接,而且进行了交互通信。

相关文章