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

目录
相关文章
|
1月前
|
网络协议 Java API
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
62 2
|
1月前
|
存储 网络协议 Java
【网络】UDP和TCP之间的差别和回显服务器
【网络】UDP和TCP之间的差别和回显服务器
65 1
|
1月前
|
网络协议 Python
Python创建一个TCP服务器
Python创建一个TCP服务器
|
3月前
|
网络协议 安全 Unix
6! 用Python脚本演示TCP 服务器与客户端通信过程!
6! 用Python脚本演示TCP 服务器与客户端通信过程!
|
3月前
|
网络协议 iOS开发 MacOS
Mac使用TCP发送信息nc -l 9000 和 telnet 127.0.0.1 9000
Mac使用TCP发送信息nc -l 9000 和 telnet 127.0.0.1 9000
37 1
|
2月前
|
网络协议 数据处理 C语言
利用C语言基于poll实现TCP回声服务器的多路复用模型
此代码仅为示例,展示了如何基于 `poll`实现多路复用的TCP回声服务器的基本框架。在实际应用中,你可能需要对其进行扩展或修改,以满足具体的需求。
85 0
|
4月前
|
网络协议 Linux Unix
面试官:服务器最大可以创建多少个tcp连接以及端口并解释下你对文件句柄的理解
面试官:服务器最大可以创建多少个tcp连接以及端口并解释下你对文件句柄的理解
129 0
面试官:服务器最大可以创建多少个tcp连接以及端口并解释下你对文件句柄的理解
|
3月前
|
网络协议 安全 架构师
详解 | 一台服务器最大能支持多少条TCP连接?
详解 | 一台服务器最大能支持多少条TCP连接?
|
3月前
|
网络协议
【qt】TCP服务器如何停止监听?
【qt】TCP服务器如何停止监听?
42 0
|
3月前
|
网络协议
【qt】TCP的监听 (设置服务器IP地址和端口号)
【qt】TCP的监听 (设置服务器IP地址和端口号)
207 0