猜谜游戏,生成随机数
rand.Intn(num)会生成一个不大于num的随机数
-
如果直接这样,每次都会生成相同的随机数,想要每次都生成不同的随机数,需要使用随机数种子
-
rand.Seed(time.Now().UnixNano())- 这样就用时间作为随机数种子
有缓冲的输入
- reader := bufio.NewReader(os.Stdin)
对该缓冲区按行进行读操作
- input, err := reader.ReadString('\n')
去掉字符串的指定后缀
- strings.TrimSuffix(input, "\n") 此处留意,如果是Windows,input后面接的应该是"\r\n"
Socks5代理服务器
socks5是一个很古老的协议,一些企业搞了很强的防火墙,同样来了麻烦性,socks5就相当于在墙上开了个口子,方便内部员工进入(实际上很多翻墙软件也是最终暴露一些socks5给浏览器端口使用)
使用Socks5的话,整个过程的几个阶段
- 协商阶段:Client和代理协商好
- 请求阶段:Client发送请求,代理和Server建立TCP连接
- 发送数据和返回
server.Accept() 返回的是net.Conn类型
网络协议:所谓协议,就是约定好,先发什么,后法什么,接收方就知道,哦,我接收到的第一个数,要当作版本处理,我接收的第二个数,要当作长度处理
一个读取的方式
先定义一个固定长度的缓冲区,然后用io.ReadFull(reader,buf)来读满