通过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
相关产品推荐
相关产品推荐

