概述
Telnet 回音服务器是一个简单而实用的网络应用,通过 Telnet 协议连接,用户输入什么,服务器就回显什么。
本文将介绍如何使用 Go 语言创建一个 Telnet 回音服务器,通过完整的示例代码和详细注释,便于理解 TCP 服务器的基本结构和实现。
1. TCP 服务器基础
T
package main import ("fmt""net") func main() { listener, err := net.Listen("tcp", ":8080") if err != nil { panic(err) } defer listener.Close() fmt.Println("Telnet回音服务器已启动,监听端口8080...") for { conn, err := listener.Accept() if err != nil { fmt.Println("连接失败:", err) continue } go handleConnection(conn) }} func handleConnection(conn net.Conn) { defer conn.Close() buffer := make([]byte, 1024) for { n, err := conn.Read(buffer) if err != nil { fmt.Println("读取数据失败:", err) return } data := buffer[:n] fmt.Println("收到消息:", string(data)) _, err = conn.Write(data) if err != nil { fmt.Println("发送消息失败:", err) return } }}
2. Telnet 回音服务器实现
package main import ("bufio""fmt""net") func main() { listener, err := net.Listen("tcp", ":8080") if err != nil { panic(err) } defer listener.Close() fmt.Println("Telnet回音服务器已启动,监听端口8080...") for { conn, err := listener.Accept() if err != nil { fmt.Println("连接失败:", err) continue } go handleTelnetConnection(conn) }} func handleTelnetConnection(conn net.Conn) { defer conn.Close() fmt.Fprint(conn, "欢迎来到Telnet回音服务器!\n") scanner := bufio.NewScanner(conn) for scanner.Scan() { input := scanner.Text() fmt.Println("收到消息:", input) fmt.Fprintln(conn, "回音:"+input) } if err := scanner.Err(); err != nil { fmt.Println("读取数据失败:", err) }}
3. 安全关闭服务器
package main import ( "bufio" "fmt" "net" "os" "os/signal" "syscall") func main() { listener, err := net.Listen("tcp", ":8080") if err != nil { panic(err) } defer listener.Close() fmt.Println("Telnet 回音服务器已启动,监听端口8080...") // 监听系统信号,实现优雅关闭服务器 signalChannel := make(chan os.Signal, 1) signal.Notify(signalChannel, syscall.SIGINT, syscall.SIGTERM) go func() { <-signalChannel fmt.Println("\n 接收到关闭信号,正在优雅关闭服务器...") listener.Close() os.Exit(0) }() for { conn, err := listener.Accept() if err != nil { fmt.Println("连接失败:", err) continue } go handleTelnetConnection(conn) } }
4. Telnet 回音服务器实践
使用 Telnet 客户端连接
启动 Telnet 客户端并连接到服务器
telnet 127.0.0.1 8080
输入消息,观察服务器回音
欢迎来到Telnet回音服务器!Hello, Go!回音:Hello, Go!
总结
通过本文的介绍,读者已经了解了如何使用 Go 语言构建一个简单的 Telnet 回音服务器。
从 TCP 服务器的基本结构到连接处理的 goroutine,每一步都被清晰地呈现出来。
希望本文能够帮助读者理解 TCP 服务器的运作原理,并在实际项目中更加灵活运用。