登录
首页 >  Golang >  Go教程

Golang实现TCP端口监听教程

时间:2026-02-18 08:29:34 107浏览 收藏

本文手把手教你用 Go 语言从零实现一个轻量、高效的 TCP 服务器:通过 net.Listen 监听指定端口(如 :8080),利用 Accept 持续接收客户端连接,并为每个连接启动独立 goroutine 并发处理,再借助 Conn.Read/Write 完成字节流通信——附带开箱即用的回声服务器完整示例,无第三方依赖,代码简洁清晰,适合初学者快速上手并深入理解 Go 网络编程的核心机制。

如何使用Golang实现TCP服务器_监听端口并接收客户端请求

监听端口:用 net.Listen 创建 TCP 服务端

使用 net.Listen("tcp", ":8080") 即可启动一个监听本地所有 IP 的 TCP 服务器,端口号为 8080。冒号前留空表示监听所有可用地址(等价于 0.0.0.0:8080)。如果只想监听本机(如调试),可写成 "127.0.0.1:8080"

接收连接:用 Accept 循环处理客户端

listener.Accept() 是阻塞调用,每次返回一个 net.Conn 接口,代表与某个客户端建立的连接。通常放在 for 循环里持续等待新连接:

  • 每个连接建议起一个 goroutine 处理,避免阻塞后续连接接入
  • 记得在处理完后调用 conn.Close() 释放资源
  • 可配合 context 或超时控制防止长期空挂

读写数据:通过 Conn.Read 和 Conn.Write 通信

拿到 net.Conn 后,就能像操作文件一样收发字节流:

  • conn.Read(buf) 读取客户端发来的数据,返回实际读到的字节数
  • conn.Write([]byte("hello")) 向客户端发送响应
  • 注意 Read 可能只读部分数据,需循环读或使用 bufio.Reader 简化处理
  • 若需按行或按协议解析,推荐封装成自定义 handler 函数

基础完整示例(无第三方依赖)

以下是一个最小可运行的回声服务器:

<code>package main

import (
    "fmt"
    "io"
    "log"
    "net"
)

func handleConn(conn net.Conn) {
    defer conn.Close()
    buf := make([]byte, 1024)
    for {
        n, err := conn.Read(buf)
        if err == io.EOF {
            fmt.Println("client disconnected")
            return
        }
        if err != nil {
            log.Printf("read error: %v", err)
            return
        }
        // 回复收到的内容
        conn.Write(buf[:n])
    }
}

func main() {
    listener, err := net.Listen("tcp", ":8080")
    if err != nil {
        log.Fatal(err)
    }
    defer listener.Close()
    fmt.Println("Server listening on :8080")

    for {
        conn, err := listener.Accept()
        if err != nil {
            log.Printf("accept error: %v", err)
            continue
        }
        go handleConn(conn)
    }
}</code>

运行后,可用 telnet localhost 8080nc localhost 8080 测试连接和收发。

到这里,我们也就讲完了《Golang实现TCP端口监听教程》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>