git地址

假如 用户和dst不通,然而部署这个服务的设施和dst通,将这台设施收到的内容发送给dst,将dst返回的内容,返回给客户

  1. 用到的go根底库

    • net.Listen 和listener.Accept 建设本地的tcp连贯
    • net.Dail() 向远端发动tcp申请
package mainimport (    "io"    "log"    "net")const dst_host = "www.baidu.com:80"// 假如 用户和dst不通,然而部署这个服务的设施和dst通,将这台设施收到的内容发送给dst,将dst返回的内容,返回给客户func main() {    listener, err := net.Listen("tcp", ":80")    if err != nil {        log.Fatal("谬误", err)    }    for {        conn, err := listener.Accept()        if err != nil {            log.Fatalln("accept出错", err)        }        handler(conn)    }}func handler(src net.Conn) {    dst, err := net.Dial("tcp", dst_host)    if err != nil {        log.Fatalln("连贯出错", err)    }    defer dst.Close()    // 避免阻塞,应用协程    go func() {        // 将源的内容发送给dst        _, err := io.Copy(dst, src)        if err != nil {            log.Fatalln("源到目标copy出错", err)        }    }()    _, err = io.Copy(src, dst)    if err != nil {        log.Fatalln("目标到源copy出错", err)    }}