Go言語でデータ転送機能を実現する方法は?

データ転送の機能を実現するためには、Go言語のgoroutineとチャネル機構を使用することができます。

まず、データを受信する関数を作成し、受信したデータを送信先アドレスに送信します。この関数では、ネットワーク通信を行うためにnetパッケージの関連する関数を使用することができます。

func forwardData(source net.Conn, destination net.Conn) {
    defer source.Close()
    defer destination.Close()

    // 创建一个缓冲区,用于存储从源地址读取到的数据
    buffer := make([]byte, 4096)

    for {
        // 从源地址读取数据
        bytesRead, err := source.Read(buffer)
        if err != nil {
            log.Println("Error reading data from source:", err)
            return
        }

        // 将读取到的数据发送到目标地址
        _, err = destination.Write(buffer[:bytesRead])
        if err != nil {
            log.Println("Error forwarding data:", err)
            return
        }
    }
}

その後、メイン関数でリスナーを作成し、接続要求を受け入れます。新しい接続が発生するたびに、データ転送を処理するためにgoroutineを起動します。

func main() {
    // 创建一个监听器
    listener, err := net.Listen("tcp", "localhost:8000")
    if err != nil {
        log.Fatal("Error creating listener:", err)
    }
    defer listener.Close()

    for {
        // 接受连接请求
        source, err := listener.Accept()
        if err != nil {
            log.Println("Error accepting connection:", err)
            continue
        }

        // 连接到目标地址
        destination, err := net.Dial("tcp", "example.com:80")
        if err != nil {
            log.Println("Error connecting to destination:", err)
            source.Close()
            continue
        }

        // 启动一个goroutine来处理数据转发
        go forwardData(source, destination)
    }
}

新しい接続があるたびに、新しいgoroutineが起動してデータ転送を処理し、データ転送機能を実現します。

bannerAds