以下是一个简单的流量转发程序的示例,使用Go语言编写:

package main

import (
    "fmt"
    "net"
)

func main() {
    listenAddr := '127.0.0.1:8000'
    forwardAddr := '127.0.0.1:9000'

    listener, err := net.Listen('tcp', listenAddr)
    if err != nil {
        fmt.Println('Error listening:', err.Error())
        return
    }
    defer listener.Close()
    fmt.Println('Listening on', listenAddr)

    for {
        conn, err := listener.Accept()
        if err != nil {
            fmt.Println('Error accepting:', err.Error())
            continue
        }
        go handleConnection(conn, forwardAddr)
    }
}

func handleConnection(conn net.Conn, forwardAddr string) {
    forward, err := net.Dial('tcp', forwardAddr)
    if err != nil {
        fmt.Println('Error forwarding:', err.Error())
        conn.Close()
        return
    }
    defer forward.Close()

    go func() {
        _, err := conn.Write([]byte('Connected to forward server\n'))
        if err != nil {
            fmt.Println('Error writing to client:', err.Error())
            forward.Close()
            conn.Close()
            return
        }
    }()

    go func() {
        _, err := forward.Write([]byte('Connected to client\n'))
        if err != nil {
            fmt.Println('Error writing to forward server:', err.Error())
            forward.Close()
            conn.Close()
            return
        }
    }()

    buffer := make([]byte, 1024)
    for {
        n, err := conn.Read(buffer)
        if err != nil {
            fmt.Println('Error reading from client:', err.Error())
            forward.Close()
            conn.Close()
            return
        }
        _, err = forward.Write(buffer[:n])
        if err != nil {
            fmt.Println('Error writing to forward server:', err.Error())
            forward.Close()
            conn.Close()
            return
        }
    }
}

该程序监听在本地地址的8000端口上,并将连接转发到本地地址的9000端口上。它使用两个goroutine,一个处理从客户端读取的数据并将其转发到服务器,另一个处理从服务器读取的数据并将其转发到客户端。在处理连接时,该程序还向客户端和服务器发送了一些欢迎信息。


原文地址: https://www.cveoy.top/t/topic/oFKG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录