ubuntu

Golang在Ubuntu上的网络编程技巧

小樊
45
2025-08-25 17:40:41
栏目: 编程语言

Golang在Ubuntu上进行网络编程时,可利用标准库netnet/http实现多种协议通信,以下是关键技巧和示例:

一、基础网络编程

  1. TCP通信

    • 服务器:使用net.Listen("tcp", ":端口号")监听端口,通过Accept()接受连接,每个连接用goroutine处理以实现并发。
      // 示例:TCP服务器
      listener, _ := net.Listen("tcp", ":8080")
      defer listener.Close()
      for {
          conn, _ := listener.Accept()
          go handleConnection(conn) // 处理连接的函数
      }
      
    • 客户端:通过net.Dial("tcp", "服务器地址:端口")连接服务器,使用Write()发送数据,Read()接收响应。
      // 示例:TCP客户端
      conn, _ := net.Dial("tcp", "localhost:8080")
      defer conn.Close()
      conn.Write([]byte("Hello Server"))
      buffer := make([]byte, 1024)
      n, _ := conn.Read(buffer)
      fmt.Println(string(buffer[:n]))
      
  2. UDP通信

    • 服务器:用net.ListenUDP("udp", &net.UDPAddr{Port: 端口号})监听,通过ReadFromUDP()接收数据,WriteToUDP()发送响应。
      // 示例:UDP服务器
      addr, _ := net.ResolveUDPAddr("udp", ":8080")
      conn, _ := net.ListenUDP("udp", addr)
      defer conn.Close()
      buffer := make([]byte, 1024)
      n, clientAddr, _ := conn.ReadFromUDP(buffer)
      conn.WriteToUDP([]byte("Received"), clientAddr)
      
    • 客户端:通过net.DialUDP("udp", nil, &net.UDPAddr{IP: IP地址, Port: 端口号})连接,直接发送和接收数据。
      // 示例:UDP客户端
      addr, _ := net.ResolveUDPAddr("udp", "localhost:8080")
      conn, _ := net.DialUDP("udp", nil, addr)
      defer conn.Close()
      conn.Write([]byte("Hello UDP Server"))
      buffer := make([]byte, 1024)
      n, _, _ := conn.ReadFromUDP(buffer)
      fmt.Println(string(buffer[:n]))
      

二、HTTP编程

使用net/http包快速搭建HTTP服务,支持GET/POST请求和JSON响应。

三、关键技巧

  1. 并发处理:利用goroutine处理每个连接,避免阻塞主线程。例如TCP服务器中,每个客户端连接都启动一个goroutine
  2. 错误处理:务必检查net包函数返回的错误,如ListenDialRead等操作可能因端口占用或网络问题失败。
  3. 资源释放:使用defer关闭连接(conn.Close()),避免资源泄漏。
  4. 跨平台兼容:Go代码在Ubuntu和其他系统上无需修改即可运行,只需确保安装对应系统的Go环境。

四、进阶场景

以上技巧基于Go标准库,无需额外安装依赖,适合快速开发Ubuntu上的网络应用。

0
看了该问题的人还看了