小編給大家分享一下Go語言如何實(shí)現(xiàn)Telnet回音服務(wù)器,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供京山網(wǎng)站建設(shè)、京山做網(wǎng)站、京山網(wǎng)站設(shè)計(jì)、京山網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、京山企業(yè)網(wǎng)站模板建站服務(wù),10余年京山做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
本文介紹了Go語言Telnet回音服務(wù)器,分享給大家,具體如下:
package main import ( "fmt" "net" "bufio" "strings" "os" ) func main() { // 創(chuàng)建一個程序結(jié)束碼的通道 exitChan := make(chan int) // 將服務(wù)器并發(fā)運(yùn)行 go server("127.0.0.1:7001", exitChan) // 通道阻塞, 等待接收返回值 code := <-exitChan // 標(biāo)記程序返回值并退出 os.Exit(code) } // 服務(wù)邏輯, 傳入地址和退出的通道 func server(address string, exitChan chan int) { // 根據(jù)給定地址進(jìn)行偵聽 l, err := net.Listen("tcp", address) // 如果偵聽發(fā)生錯誤, 打印錯誤并退出 if err != nil { fmt.Println(err.Error()) exitChan <- 1 } // 打印偵聽地址, 表示偵聽成功 fmt.Println("listen: " + address) // 延遲關(guān)閉偵聽器 defer l.Close() // 偵聽循環(huán) for { // 新連接沒有到來時, Accept是阻塞的 conn, err := l.Accept() // 發(fā)生任何的偵聽錯誤, 打印錯誤并退出服務(wù)器 if err != nil { fmt.Println(err.Error()) continue } // 根據(jù)連接開啟會話, 這個過程需要并行執(zhí)行 go handleSession(conn, exitChan) } } // 連接的會話邏輯 func handleSession(conn net.Conn, exitChan chan int) { fmt.Println("Session started:") // 創(chuàng)建一個網(wǎng)絡(luò)連接數(shù)據(jù)的讀取器 reader := bufio.NewReader(conn) // 接收數(shù)據(jù)的循環(huán) for { // 讀取字符串, 直到碰到回車返回 str, err := reader.ReadString('\n') // 數(shù)據(jù)讀取正確 if err == nil { // 去掉字符串尾部的回車 str = strings.TrimSpace(str) // 處理Telnet指令 if !processTelnetCommand(str, exitChan) { conn.Close() break } // Echo邏輯, 發(fā)什么數(shù)據(jù), 原樣返回 conn.Write([]byte(str + "\r\n")) } else { // 發(fā)生錯誤 fmt.Println("Session closed") conn.Close() break } } } //命令處理 func processTelnetCommand(str string, exitChan chan int) bool { // @close指令表示終止本次會話 if strings.HasPrefix(str, "@close") { fmt.Println("Session closed") // 告訴外部需要斷開連接 return false // @shutdown指令表示終止服務(wù)進(jìn)程 } else if strings.HasPrefix(str, "@shutdown") { fmt.Println("Server shutdown") // 往通道中寫入0, 阻塞等待接收方處理 exitChan <- 0 // 告訴外部需要斷開連接 return false } // 打印輸入的字符串 fmt.Println(str) return true }
以上是“Go語言如何實(shí)現(xiàn)Telnet回音服務(wù)器”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁名稱:Go語言如何實(shí)現(xiàn)Telnet回音服務(wù)器
當(dāng)前URL:http://muchs.cn/article16/gjspdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、網(wǎng)站設(shè)計(jì)、響應(yīng)式網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、服務(wù)器托管、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)