Golang教程

TCP 和 UDP 编程

Preview
  • Golang TCP 和 UDP 编程
  • TCP 编程
  • Golang TCP Server
  • Golang TCP Client
  • UDP 编程
  • Golang UDP Server
  • Golang UDP Client
  • 总结

Golang TCP 和 UDP 编程

TCP 编程

Golang TCP Server

在 Golang 中,创建一个 TCP Server 非常简单。我们只需要使用 net.Listen 函数来监听指定的端口,并使用 net.Accept 函数来接受连接请求。下面是一个简单的 TCP Server 的代码示例:

package main

import (
    "fmt"
    "net"
)

func handleConnection(conn net.Conn) {
    defer conn.Close()

    // 处理连接请求
    // TODO: 处理具体的业务逻辑
}

func main() {
    addr := "127.0.0.1:8080"
    listener, err := net.Listen("tcp", addr)
    if err != nil {
        fmt.Println("Error listening:", err.Error())
        return
    }
    defer listener.Close()

    fmt.Println("Listening on", addr)

    for {
        conn, err := listener.Accept()
        if err != nil {
            fmt.Println("Error accepting:", err.Error())
            continue
        }
        go handleConnection(conn)
    }
}

在上面的代码中,我们首先使用 net.Listen 函数来监听指定的地址和端口。然后,在一个无限循环中,使用 listener.Accept 函数来接受连接请求。当有新的连接请求到达时,会创建一个新的 goroutine 来处理连接请求,这样可以实现并发处理多个连接请求。

Golang TCP Client

在 Golang 中,创建一个 TCP Client 也很简单。我们只需要使用 net.Dial 函数来建立 TCP 连接,然后就可以通过该连接进行数据传输了。下面是一个简单的 TCP Client 的代码示例:

package main

import (
    "fmt"
    "net"
)

func main() {
    addr := "127.0.0.1:8080"
    conn, err := net.Dial("tcp", addr)
    if err != nil {
        fmt.Println("Error connecting:", err.Error())
        return
    }
    defer conn.Close()

    // TODO: 发送数据到服务器
}

在上面的代码中,我们使用 net.Dial 函数来建立 TCP 连接。然后,就可以通过该连接向服务器发送数据了。

UDP 编程

Golang UDP Server

在 Golang 中,创建一个 UDP Server 也很简单。我们只需要使用 net.ListenUDP 函数来监听指定的端口,并使用 conn.ReadFromUDP 函数来接收数据。下面是一个简单的 UDP Server 的代码示例:

package main

import (
    "fmt"
    "net"
)

func main() {
    addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8080")
    if err != nil {
        fmt.Println("Error resolving address:", err.Error())
        return
    }

    conn, err := net.ListenUDP("udp", addr)
    if err != nil {
        fmt.Println("Error listening:", err.Error())
        return
    }
    defer conn.Close()

    fmt.Println("Listening on", addr)

    buf := make([]byte, 1024)

    for {
        n, addr, err := conn.ReadFromUDP(buf)
        if err != nil {
            fmt.Println("Error reading:", err.Error())
            continue
        }

        fmt.Printf("Received %d bytes from %s\n", n, addr.String())

        // 处理数据
        // TODO: 处理具体的业务逻辑
    }
}

在上面的代码中,我们首先使用 net.ResolveUDPAddr 函数来解析 UDP 地址和端口。然后,使用 net.ListenUDP 函数来监听指定的地址和端口。在一个无限循环中,使用 conn.ReadFromUDP 函数来接收数据。当有新的数据到达时,会打印出数据的大小和来源地址,然后再处理具体的业务逻辑。

Golang UDP Client

在 Golang 中,创建一个 UDP Client 也很简单。我们只需要使用 net.DialUDP 函数来建立 UDP 连接,然后就可以通过该连接进行数据传输了。下面是一个简单的 UDP Client 的代码示例:

package main

import (
    "fmt"
    "net"
)

func main() {
    addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8080")
    if err != nil {
        fmt.Println("Error resolving address:", err.Error())
        return
    }

    conn, err := net.DialUDP("udp", nil, addr)
    if err != nil {
        fmt.Println("Error connecting:", err.Error())
        return
    }
    defer conn.Close()

    // TODO: 发送数据到服务器
}

在上面的代码中,我们使用 net.ResolveUDPAddr 函数来解析 UDP 地址和端口。然后,使用 net.DialUDP 函数来建立 UDP 连接。接下来,我们就可以通过该连接向服务器发送数据了。

总结

Golang TCP 和 UDP 编程非常简单。我们只需要使用标准库提供的函数,就可以轻松地创建 TCP 和 UDP Server,以及 TCP 和 UDP Client。在使用 TCP 和 UDP 编程时,我们需要注意网络协议的特点和使用方式,以确保程序正确运行。