go实现 | 豆包MarsCode AI刷题

58 阅读1分钟

go实现:基础 TCP 服务器

package main

import (
	"bufio"
	"log"
	"net"
)

func main() {
	server, err := net.Listen("tcp", "127.0.0.1:1080")
	if err != nil {
		panic(err)
	}
	for {
		client, err := server.Accept()
		if err != nil {
			log.Printf("Accept failed %v", err)
			continue
		}
		go process(client)
	}
}

func process(conn net.Conn) {
	defer conn.Close()
	reader := bufio.NewReader(conn)
	for {
		b, err := reader.ReadByte()
		if err != nil {
			break
		}
		_, err = conn.Write([]byte{b})
		if err != nil {
			break
		}
	}
}

1.1. 代码结构分析

这是一个最基本的 TCP 代理服务器实现。它在本地的 127.0.0.1:1080 地址上监听 TCP 请求,并为每一个连接创建一个新的 goroutine 来处理。该服务器只是简单地实现了一个“回显”功能,即接收到的数据会被原封不动地写回到客户端。

主要功能:

  • 使用 net.Listen 在指定端口上监听连接。
  • 对每一个连接,使用 bufio.NewReader 来读取客户端的数据。
  • 数据会被简单地读取(通过 ReadByte)并通过 Write 方法返回给客户端。

问题:

  • 此代码没有对客户端请求做任何协议处理,它仅仅实现了一个 TCP 回显服务器,不具备 SOCKS5 协议的任何功能。

1.2. 代码扩展需求

为了使其成为一个 SOCKS5 代理服务器,我们需要添加 SOCKS5 协议的握手过程、认证方式、命令解析以及目标连接功能。接下来,我们将逐步在此基础上进行迭代。