Go语言如何实现Telnet回音服务器
小编给大家分享一下Go语言如何实现Telnet回音服务器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
本文介绍了Go语言Telnet回音服务器,分享给大家,具体如下:
packagemain import( "fmt" "net" "bufio" "strings" "os" ) funcmain(){ //创建一个程序结束码的通道 exitChan:=make(chanint) //将服务器并发运行 goserver("127.0.0.1:7001",exitChan) //通道阻塞,等待接收返回值 code:=<-exitChan //标记程序返回值并退出 os.Exit(code) } //服务逻辑,传入地址和退出的通道 funcserver(addressstring,exitChanchanint){ //根据给定地址进行侦听 l,err:=net.Listen("tcp",address) //如果侦听发生错误,打印错误并退出 iferr!=nil{ fmt.Println(err.Error()) exitChan<-1 } //打印侦听地址,表示侦听成功 fmt.Println("listen:"+address) //延迟关闭侦听器 deferl.Close() //侦听循环 for{ //新连接没有到来时,Accept是阻塞的 conn,err:=l.Accept() //发生任何的侦听错误,打印错误并退出服务器 iferr!=nil{ fmt.Println(err.Error()) continue } //根据连接开启会话,这个过程需要并行执行 gohandleSession(conn,exitChan) } } //连接的会话逻辑 funchandleSession(connnet.Conn,exitChanchanint){ fmt.Println("Sessionstarted:") //创建一个网络连接数据的读取器 reader:=bufio.NewReader(conn) //接收数据的循环 for{ //读取字符串,直到碰到回车返回 str,err:=reader.ReadString('\n') //数据读取正确 iferr==nil{ //去掉字符串尾部的回车 str=strings.TrimSpace(str) //处理Telnet指令 if!processTelnetCommand(str,exitChan){ conn.Close() break } //Echo逻辑,发什么数据,原样返回 conn.Write([]byte(str+"\r\n")) }else{ //发生错误 fmt.Println("Sessionclosed") conn.Close() break } } } //命令处理 funcprocessTelnetCommand(strstring,exitChanchanint)bool{ //@close指令表示终止本次会话 ifstrings.HasPrefix(str,"@close"){ fmt.Println("Sessionclosed") //告诉外部需要断开连接 returnfalse //@shutdown指令表示终止服务进程 }elseifstrings.HasPrefix(str,"@shutdown"){ fmt.Println("Servershutdown") //往通道中写入0,阻塞等待接收方处理 exitChan<-0 //告诉外部需要断开连接 returnfalse } //打印输入的字符串 fmt.Println(str) returntrue }
以上是“Go语言如何实现Telnet回音服务器”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
go如何实现职责链模式
go如何实现职责链模式这篇文章主要讲解了“go如何实现职责链模式”...
-
Go Callvis如何使用
GoCallvis如何使用今天小编给大家分享一下GoCallv...
-
go pprof如何使用
gopprof如何使用这篇文章主要介绍“gopprof如何使用...
-
Go框架三件套Gorm、Kitex、Hertz怎么使用
Go框架三件套Gorm、Kitex、Hertz怎么使用本篇内容介绍...
-
Go语言单元测试和基准测试实例代码分析
Go语言单元测试和基准测试实例代码分析本篇内容主要讲解“Go语言单...
-
go Realize怎么使用
goRealize怎么使用本文小编为大家详细介绍“goReal...
-
14天学会Go语言第四天:Array Map Slice 数组 和切片
-
如何从 PHP 过渡到 Golang?
我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗...
-
零经验Go语言MVC框架,并推荐PHP函数库和MySQL表自动转struct
最近搭建k8s系统,为了调试自动部署用Go做了个MVC框架,这是个适用于喜欢Go语言练习的框架,零Go语言经验学习Go;配合Go模...
-
从php到Golang系统的演变