| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- package Service
- import (
- "io"
- "net"
- "github.com/astaxie/beego/logs"
- )
- type ForWardClient struct {
- SrcConn net.Conn
- DestConn net.Conn
- ClosedCallBack func(srcConn net.Conn, destConn net.Conn)
- }
- func (_self *ForWardClient) StartForward() {
- //io.Copy(dst, src)
- go func() {
- _, err := io.Copy(_self.DestConn, _self.SrcConn)
- if err != nil {
- //logs.Error("客户端来源数据转发到目标端口异常:", err)
- _self.StopForward()
- }
- }()
- go func() {
- _, err := io.Copy(_self.SrcConn, _self.DestConn)
- if err != nil {
- //logs.Error("目标端口返回响应数据异常:", err)
- _self.StopForward()
- }
- }()
- }
- func (_self *ForWardClient) DispatchData(dispatchConns []io.Writer) {
- //将数据克隆给其它端口
- go func() {
- mWriter := io.MultiWriter(dispatchConns...)
- _, err := io.Copy(mWriter, _self.SrcConn)
- if err != nil {
- logs.Error("Dispatch网络连接异常:", err)
- }
- }()
- }
- func (_self *ForWardClient) StopForward() {
- //logs.Debug("关闭一个连接:", _self.SrcConn.RemoteAddr()," on ", _self.SrcConn.LocalAddr())
- _self.SrcConn.Close()
- _self.DestConn.Close()
- _self.ClosedCallBack(_self.SrcConn, _self.DestConn)
- }
|