婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Go語言Telnet回音服務器的實現

Go語言Telnet回音服務器的實現

熱門標簽:澳門防封電銷卡 智能電銷機器人營銷 福州鐵通自動外呼系統 地圖標注測試 長沙ai機器人電銷 廣東語音外呼系統供應商 濮陽自動外呼系統代理 烏魯木齊人工電銷機器人系統 賺地圖標注的錢犯法嗎

本文介紹了Go語言Telnet回音服務器,分享給大家,具體如下:

package main

import (
  "fmt"
  "net"
  "bufio"
  "strings"
  "os"
)

func main() {

  // 創建一個程序結束碼的通道
  exitChan := make(chan int)

  // 將服務器并發運行
  go server("127.0.0.1:7001", exitChan)

  // 通道阻塞, 等待接收返回值
  code := -exitChan

  // 標記程序返回值并退出
  os.Exit(code)
}

// 服務邏輯, 傳入地址和退出的通道
func server(address string, exitChan chan int) {

  // 根據給定地址進行偵聽
  l, err := net.Listen("tcp", address)

  // 如果偵聽發生錯誤, 打印錯誤并退出
  if err != nil {
   fmt.Println(err.Error())
   exitChan - 1
  }

  // 打印偵聽地址, 表示偵聽成功
  fmt.Println("listen: " + address)

  // 延遲關閉偵聽器
  defer l.Close()

  // 偵聽循環
  for {

   // 新連接沒有到來時, Accept是阻塞的
   conn, err := l.Accept()

   // 發生任何的偵聽錯誤, 打印錯誤并退出服務器
   if err != nil {
     fmt.Println(err.Error())
     continue
   }

   // 根據連接開啟會話, 這個過程需要并行執行
   go handleSession(conn, exitChan)
  }
}

// 連接的會話邏輯
func handleSession(conn net.Conn, exitChan chan int) {

  fmt.Println("Session started:")

  // 創建一個網絡連接數據的讀取器
  reader := bufio.NewReader(conn)

  // 接收數據的循環
  for {

   // 讀取字符串, 直到碰到回車返回
   str, err := reader.ReadString('\n')

   // 數據讀取正確
   if err == nil {

     // 去掉字符串尾部的回車
     str = strings.TrimSpace(str)

     // 處理Telnet指令
     if !processTelnetCommand(str, exitChan) {
      conn.Close()
      break
     }

     // Echo邏輯, 發什么數據, 原樣返回
     conn.Write([]byte(str + "\r\n"))

   } else {
     // 發生錯誤
     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指令表示終止服務進程
  } else if strings.HasPrefix(str, "@shutdown") {

   fmt.Println("Server shutdown")

   // 往通道中寫入0, 阻塞等待接收方處理
   exitChan - 0

   // 告訴外部需要斷開連接
   return false
  }

  // 打印輸入的字符串
  fmt.Println(str)

  return true

}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • Go語言實現簡單的一個靜態WEB服務器
  • Go語言服務器開發實現最簡單HTTP的GET與POST接口
  • Go語言實現的一個簡單Web服務器
  • golang實現http服務器處理靜態文件示例
  • go語言實現一個最簡單的http文件服務器實例
  • Go語言服務器開發之客戶端向服務器發送數據并接收返回數據的方法
  • Go語言基于Socket編寫服務器端與客戶端通信的實例

標簽:德州 西雙版納 調研邀請 慶陽 貴陽 廣西 阿克蘇 太原

巨人網絡通訊聲明:本文標題《Go語言Telnet回音服務器的實現》,本文關鍵詞  語言,Telnet,回音,服務器,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Go語言Telnet回音服務器的實現》相關的同類信息!
  • 本頁收集關于Go語言Telnet回音服務器的實現的相關信息資訊供網民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章
    主站蜘蛛池模板: 外汇| 佛学| 延长县| 双鸭山市| 湘西| 多伦县| 宣化县| 香格里拉县| 馆陶县| 松溪县| 莱西市| 定远县| 镇赉县| 黔东| 浠水县| 湘阴县| 伊通| 海门市| 日照市| 衡阳县| 通州区| 广宗县| 和硕县| 乐都县| 洪江市| 特克斯县| 湘阴县| 桃园市| 保靖县| 分宜县| 平度市| 岳池县| 苍溪县| 榆社县| 若尔盖县| 唐河县| 鄄城县| 册亨县| 姜堰市| 浏阳市| 城步|