GO语言实现TCP端口转发代码

Posted sunansheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GO语言实现TCP端口转发代码相关的知识,希望对你有一定的参考价值。

package main

import (
	"fmt"
	"log"
	"net"
)

func main() 
	//源端口,目的端口
	var fromport, toport int = 2222, 88
	fromaddr := fmt.Sprintf("127.0.0.1:%d", fromport)
	toaddr := fmt.Sprintf("127.0.0.1:%d", toport)

	fromlistener, err := net.Listen("tcp", fromaddr)

	if err != nil 
		log.Fatal("Unable to listen on: %s, error: %s\\n", fromaddr, err.Error())
	
	defer fromlistener.Close()

	for 
		fromcon, err := fromlistener.Accept()
		if err != nil 
			fmt.Printf("Unable to accept a request, error: %s\\n", err.Error())
		 else 
			fmt.Println("new connect:" + fromcon.RemoteAddr().String())
		

		//这边最好也做个协程,防止阻塞
		toCon, err := net.Dial("tcp", toaddr)
		if err != nil 
			fmt.Printf("can not connect to %s\\n", toaddr)
			continue
		

		go handleConnection(fromcon, toCon)
		go handleConnection(toCon, fromcon)

	



func handleConnection(r, w net.Conn) 
	defer r.Close()
	defer w.Close()

	var buffer = make([]byte, 100000)
	for 
		n, err := r.Read(buffer)
		if err != nil 
			break
		

		n, err = w.Write(buffer[:n])
		if err != nil 
			break
		
	



声明:Nansheng.Su 发表于 2019-05-13 09:53:20 ,共计20字。

转载请署名:GO语言实现TCP端口转发【代码】 | www.sunansheng.com

以上是关于GO语言实现TCP端口转发代码的主要内容,如果未能解决你的问题,请参考以下文章

GO tcp端口转发与映射

端口转发器

GO tcp端口转发与映射

[Go]基于Go语言的Web路由转发,多个网站共享一个端口

golang 转到TCP代理/端口转发示例(https://zupzup.org/go-port-forwarding/)

Go语言实战简简单单的几十行代码实现 TCP 通信