diff --git a/client.go b/client.go index a43fa29..296ccb9 100755 --- a/client.go +++ b/client.go @@ -3,7 +3,6 @@ package main import ( "errors" "fmt" - "io" "log" "net" "sync" @@ -107,8 +106,8 @@ func (s *TRPClient) dealChan() error { return err } //创建成功后io.copy - go io.Copy(server, c) - io.Copy(c, server) + go relay(server, c.conn) + relay(c.conn, server) return nil } diff --git a/server.go b/server.go index ad6b857..b70d858 100755 --- a/server.go +++ b/server.go @@ -3,7 +3,6 @@ package main import ( "errors" "fmt" - "io" "io/ioutil" "log" "net" @@ -179,7 +178,7 @@ retry: if _, err := link.WriteHost(s.tunnelTarget); err != nil { goto retry } - go io.Copy(link, c) - io.Copy(c, link.conn) + go relay(link.conn, c.conn) + relay(c.conn, link.conn) return nil } diff --git a/tunnel.go b/tunnel.go index 1d8342f..ec7f177 100644 --- a/tunnel.go +++ b/tunnel.go @@ -62,6 +62,7 @@ func (s *Tunnel) cliProcess(c *Conn) error { s.verifyError(c) return err } + c.conn.(*net.TCPConn).SetReadDeadline(time.Time{}) //做一个判断 添加到对应的channel里面以供使用 flag, err := c.ReadFlag() if err != nil { diff --git a/util.go b/util.go index 4e95278..f44b2b0 100644 --- a/util.go +++ b/util.go @@ -7,6 +7,9 @@ import ( "encoding/binary" "errors" "fmt" + "io" + "log" + "net" "net/http" "net/http/httputil" "net/url" @@ -146,3 +149,10 @@ func replaceHost(resp []byte) []byte { } return []byte(str) } + +func relay(in, out net.Conn) { + if _, err := io.Copy(in, out); err != nil { + log.Println("copy error:", err) + } + in.Close() // +}