package main import ( "fmt" "net" "io" ) func main() { // 1. 监听端口 listener, err := net.Listen("tcp", ":8080") if err != nil { fmt.Println("Error listening:", err) return } defer listener.Close() fmt.Println("Server is listening on port 8080") // 2. 接受连接 for { conn, err := listener.Accept() if err != nil { fmt.Println("Error accepting connection:", err) continue } // 3. 处理连接 // 使用 goroutine 并发处理连接 // 这样就可以同时处理多个连接,提高并发能力 (非阻塞) go handleConnection(conn) } } // 处理连接 // 1. 读取数据 // 2. 处理数据 // 3. 写入数据 func handleConnection(conn net.Conn) { defer func() { conn.Close() fmt.Println("Connection closed by client") }() fmt.Println("New connection accepted") // 4. 循环读取数据 for { // 4.1 读取数据 buf := make([]byte, 1024) n, err := conn.Read(buf) // 如果客户端关闭连接,则退出循环 if err == io.EOF { fmt.Println("Client closed connection") break } if err != nil { fmt.Println("Error reading data:", err) break } // 4.3 处理数据 fmt.Println("Read", n, "bytes:", string(buf[:n])) // 4.2 写入数据 _, err = conn.Write([]byte("Hello, Client! I have received your message: " + string(buf[:n]) + "\n")) if err != nil { fmt.Println("Error writing data:", err) break } fmt.Println("Written", n, "bytes:", "Hello, Client! I have received your message: " + string(buf[:n]) + "\n") } }