[GO]简单的并发服务器
Posted 蟒城贝勒爷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[GO]简单的并发服务器相关的知识,希望对你有一定的参考价值。
package main import ( "net" "fmt" "strings" ) func HandleConn(conn net.Conn) { //调用完毕 defer conn.Close() //获取客户端的网络地址信息 addr := conn.RemoteAddr().String() fmt.Printf("[%s] connect success", addr) buf := make([]byte, 2048) for true { //读取用户的数据 n, err := conn.Read(buf) if err != nil { fmt.Println("Read data err = ", err) } fmt.Printf("[%s]: %s\\n", addr, string(buf[:n])) //把数字转换成大写再给用户 if "exit" == string(buf[:n-1]) { //为什么这里要-1,因为在用户输入完以后是以回车确认的,比如用户输入\'a\',那么对于程序来说实际是输入了\'a\\n’,那这里必须把用户输入的后缀去了,比对才会成功 fmt.Println(addr, "exit") return } //把数据替换为大写,再向用户发送 conn.Write([]byte(strings.ToUpper(string(buf[:n])))) } } func main() { //监听 listener, err := net.Listen("tcp", ":8000") //不写IP地址代表监听的是本机 if err != nil { fmt.Println("listener errinfo = ", err) return } defer listener.Close() for true { //接收用户的请求 conn,err := listener.Accept()//阻塞,等待用户连接 if err != nil { fmt.Println("accept err = ", err) return } //新建一个协程 go HandleConn(conn) } }
那么使用netcat进行测试后就会有这样的结果
以上是关于[GO]简单的并发服务器的主要内容,如果未能解决你的问题,请参考以下文章