You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过PuTTY连接TCP服务器时如何输入exit关闭连接?Go语言开发问题

实现PuTTY输入exit主动关闭TCP连接的修改方案

核心修改点

  • 将bufio.Reader的实例化移到循环外部,避免循环内重复创建导致缓冲数据丢失
  • 对读取到的输入内容做前后空白字符修剪,自动过滤PuTTY发送的回车、换行符后再做指令匹配
  • 匹配到exit指令后主动调用Close()方法关闭连接,退出处理协程
  • 原提示语仅输出在服务端控制台,PuTTY客户端无法看到,修改为写入连接对象推给客户端展示

修改后的完整代码

package main

import (
	"bufio"
	"fmt"
	"net"
	"strings"
)

func main() {
	// 监听TCP 8080端口
	datastream, err := net.Listen("tcp", ":8080")
	if err != nil {
		fmt.Println("监听失败:", err)
		return
	}
	defer datastream.Close()

	// 循环接受客户端连接
	for {
		connessione, err := datastream.Accept()
		if err != nil {
			fmt.Println("接受连接失败:", err)
			return
		}
		go handle(connessione)
	}
}

// 处理客户端连接逻辑
func handle(connessione net.Conn) {
	defer connessione.Close() // 退出时自动关闭连接
	// 给客户端发送提示
	fmt.Fprintln(connessione, "输入exit即可退出连接")
	// 全局复用Reader,不要在循环内重复创建
	reader := bufio.NewReader(connessione)
	for {
		data, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("读取失败:", err)
			return
		}
		// 去除前后的空白、回车、换行符
		input := strings.TrimSpace(data)
		// 判断是否为exit指令
		if input == "exit" {
			fmt.Fprintln(connessione, "即将关闭连接")
			return
		}
		// 其他输入正常打印
		fmt.Println("收到客户端输入:", input)
	}
}

验证方法

使用PuTTY选择TCP连接模式,输入服务端IP和端口8080建立连接后,输入exit按下回车,即可看到连接被主动关闭。

内容的提问来源于stack exchange,提问作者FratmCarnal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:36:04