git地址
假如 用户和dst不通,然而部署这个服务的设施和dst通,将这台设施收到的内容发送给dst,将dst返回的内容,返回给客户
用到的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) }}