TCP基础详解:Telnet回音服务器搭建

简介: TCP基础详解:Telnet回音服务器搭建

概述

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 服务器的运作原理,并在实际项目中更加灵活运用。

目录
相关文章
|
2月前
|
网络协议 安全 测试技术
手撕测试tcp服务器效率工具——以epoll和io_uring对比为例
手撕测试tcp服务器效率工具——以epoll和io_uring对比为例
42 2
|
3月前
|
存储 网络协议
TCP服务器 IO多路复用的实现:select、poll、epoll
TCP服务器 IO多路复用的实现:select、poll、epoll
36 0
|
3月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十二 ):TCP服务器(并发网络编程io多路复用epoll)
Linux C/C++ 开发(学习笔记十二 ):TCP服务器(并发网络编程io多路复用epoll)
57 0
|
6月前
|
网络协议 API
TCP并发服务器(多进程与多线程)
TCP并发服务器(多进程与多线程)
92 0
|
3月前
|
网络协议
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)(下)
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)
35 2
|
3月前
|
网络协议 Linux C++
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)
39 0
|
4月前
|
网络协议 Java API
基于UDP/TCP实现客户端服务器的网络通信程序
基于UDP/TCP实现客户端服务器的网络通信程序
|
1月前
|
网络协议 Java
【开源视频联动物联网平台】J2mod库写一个Modbus TCP 服务器
【开源视频联动物联网平台】J2mod库写一个Modbus TCP 服务器
66 0
|
5月前
|
网络协议 Python
152 python网络编程 - TCP服务器
152 python网络编程 - TCP服务器
22 0
|
2月前
|
网络协议 Java API
【JavaEE初阶】 TCP服务器与客户端的搭建
【JavaEE初阶】 TCP服务器与客户端的搭建