实例目标:

实现一个简单的TCP服务器和客户端,展示Go语言在网络编程中的应用。

代码示例:

TCP服务器

package main

import (
    "fmt"
    "net"
    "os"
)

func handleConnection(conn net.Conn) {
    fmt.Println("Client connected:", conn.RemoteAddr())
    buffer := make([]byte, 1024)

    for {
        n, err := conn.Read(buffer)
        if err != nil {
            fmt.Println("Connection error:", err)
            break
        }
        fmt.Println("Received:", string(buffer[:n]))
        conn.Write([]byte("Message received"))
    }

    conn.Close()
}

func main() {
    ln, err := net.Listen("tcp", ":8080")
    if err != nil {
        fmt.Println("Error starting server:", err)
        os.Exit(1)
    }
    defer ln.Close()

    fmt.Println("Server listening on port 8080")
    for {
        conn, err := ln.Accept()
        if err != nil {
            fmt.Println("Error accepting connection:", err)
            continue
        }
        go handleConnection(conn)
    }
}

TCP客户端

package main

import (
    "fmt"
    "net"
    "os"
)

func main() {
    conn, err := net.Dial("tcp", "localhost:8080")
    if err != nil {
        fmt.Println("Error connecting to server:", err)
        os.Exit(1)
    }
    defer conn.Close()

    fmt.Println("Connected to server")

    message := "Hello, Server!"
    conn.Write([]byte(message))

    buffer := make([]byte, 1024)
    n, err := conn.Read(buffer)
    if err != nil {
        fmt.Println("Error reading from server:", err)
        os.Exit(1)
    }

    fmt.Println("Server response:", string(buffer[:n]))
}

解释:

  1. TCP服务器
  • 使用net.Listen("tcp", ":8080")在本地8080端口创建一个TCP服务器。
  • Accept()方法阻塞并等待客户端连接。一旦连接成功,通过go handleConnection(conn)启动一个新的goroutine来处理每个连接。
  1. TCP客户端
  • 客户端通过net.Dial("tcp", "localhost:8080")连接到服务器。
  • 连接建立后,客户端向服务器发送消息,并等待服务器的响应。
  1. 多并发连接: 服务器使用goroutines来并发处理多个客户端连接,这允许服务器高效地处理多个客户端请求。

应用场景:

TCP编程常用于构建低延迟、高吞吐量的网络应用,如聊天应用、游戏服务器、实时数据传输等。