TCP 基礎詳解:Telnet 迴音服務器搭建
概述
Telnet 迴音服務器是一個簡單而實用的網絡應用,通過 Telnet 協議連接,用戶輸入什麼,服務器就回顯什麼。
本文將介紹如何使用 Go 語言創建一個 Telnet 迴音服務器,通過完整的示例代碼和詳細註釋,便於理解 TCP 服務器的基本結構和實現。
1. TCP 服務器基礎
TCP 協議簡介
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 迴音服務器實現
處理 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 服務器的運作原理,並在實際項目中更加靈活運用。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/wahPh8NTQWIciRxpsTCLrQ