一、net 包基础
1.1 TCP 服务端
package main
import (
"bufio"
"fmt"
"io"
"net"
"time"
)
func main() {
// 监听端口
listener, err := net.Listen("tcp", ":8080")
if err != nil {
fmt.Println("监听失败:", err)
return
}
defer listener.Close()
fmt.Println("TCP 服务器启动在 :8080")
for {
// 接受连接
conn, err := listener.Accept()
if err != nil {
fmt.Println("接受连接失败:", err)
continue
}
// 处理连接(每个连接一个 goroutine)
go handleConnection(conn)
}
}
func handleConnection(conn net.Conn) {
defer conn.Close()
clientAddr := conn.RemoteAddr().String()
fmt.Printf("[%s] 新连接\n", clientAddr)
// 设置读取超时
conn.SetReadDeadline(time.Now().Add(5 * time.Minute))
reader := bufio.NewReader(conn)
for {
// 读取一行数据
line, err := reader.ReadString('\n')
if err != nil {
if err == io.EOF {
fmt.Printf("[%s] 连接关闭\n", clientAddr)
} else {
fmt.Printf("[%s] 读取错误: %v\n", clientAddr, err)
}
return
}
fmt.Printf("[%s] 收到: %s", clientAddr, line)
// 回显
response := fmt.Sprintf("服务器收到: %s", line)
conn.Write([]byte(response))
}
}
2026/3/20大约 6 分钟