Golang中如何实现TCP代理?代码举例讲解

在Golang中,可以使用net包实现TCP代理。代码示例:

go
// TCP代理服务器
func handleProxy(client net.Conn) {
    // 连接远程服务器
    server, err := net.Dial("tcp", "example.com:80") 
    if err != nil {
        return
    }

    // 启动转发goroutine
    go func() {
        io.Copy(server, client)   // 发送数据到远程服务器
        server.Close()            // 关闭远程连接
    }()
    io.Copy(client, server)      // 将响应发送回客户端
    client.Close()               // 关闭客户端连接
}

func main() {
    // 监听本地8080端口
    listener, err := net.Listen("tcp", ":8080")
    if err != nil {
        log.Fatal(err) 
    }

    for {
        conn, err := listener.Accept() 
        if err != nil {
            log.Fatal(err) 
        }
        go handleProxy(conn)
    }
}

TCP代理服务器会监听本地8080端口,接受TCP连接请求,然后与远程服务器建立连接,并实现两端的数据传输,实现TCP代理的功能。

go
// TCP客户端
conn, err := net.Dial("tcp", "localhost:8080")
if err != nil {
    log.Fatal(err) 
}