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 }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。