我就废话不多说了,直接上代码吧:
package main import ( "flag" "fmt" "io" "net" "os" "strings" "sync" ) var lock sync.Mutex var trueList []string var ip string var list string func main() { flag.StringVar(&ip, "l", ":9897", "-l=0.0.0.0:9897 指定服务监听的端口") flag.StringVar(&list, "d", "127.0.0.1:1789,127.0.0.1:1788", "-d=127.0.0.1:1789,127.0.0.1:1788 指定后端的IP和端口,多个用','隔开") flag.Parse() trueList = strings.Split(list, ",") if len(trueList) <= 0 { fmt.Println("后端IP和端口不能空,或者无效") os.Exit(1) } server() } func server() { lis, err := net.Listen("tcp", ip) if err != nil { fmt.Println(err) return } defer lis.Close() for { conn, err := lis.Accept() if err != nil { fmt.Println("建立连接错误:%v\n", err) continue } fmt.Println(conn.RemoteAddr(), conn.LocalAddr()) go handle(conn) } } func handle(sconn net.Conn) { defer sconn.Close() ip, ok := getIP() if !ok { return } dconn, err := net.Dial("tcp", ip) if err != nil { fmt.Printf("连接%v失败:%v\n", ip, err) return } ExitChan := make(chan bool, 1) go func(sconn net.Conn, dconn net.Conn, Exit chan bool) { _, err := io.Copy(dconn, sconn) fmt.Printf("往%v发送数据失败:%v\n", ip, err) ExitChan <- true }(sconn, dconn, ExitChan) go func(sconn net.Conn, dconn net.Conn, Exit chan bool) { _, err := io.Copy(sconn, dconn) fmt.Printf("从%v接收数据失败:%v\n", ip, err) ExitChan <- true }(sconn, dconn, ExitChan) <-ExitChan dconn.Close() } func getIP() (string, bool) { lock.Lock() defer lock.Unlock() if len(trueList) < 1 { return "", false } ip := trueList[0] trueList = append(trueList[1:], ip) return ip, true }
以上这篇golang 实现tcp转发代理的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
标签:
golang,tcp,转发代理
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
桃源资源网 Design By www.nqtax.com
暂无“golang 实现tcp转发代理的方法”评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。