/*
简单并发tcp服务端
*/
package mainimport ("strings""fmt""net"
)func HandleConn(conn net.Conn){//获取地址addr:=conn.RemoteAddr().String()fmt.Println(addr," connect sucessful!!!")//放在return上面,不然没有执行到此return了,就不会执行defer conn.Close()//接收用户的请求buf:=make([]byte,1024)for{n,err3:=conn.Read(buf)if err3!=nil{fmt.Println("err3",err3)return}fmt.Printf("[%s]:%s\n",addr,string(buf[:n]))if "exit"==string(buf[:n-2]){//04编写客户端输入时默认ent换行带有 \r\nfmt.Println(addr,"exit")return}//把数据转换为大写,再发给用户conn.Write([]byte(strings.ToUpper(string(buf[:n]))))}}func main(){//监听listener,err:=net.Listen("tcp","127.0.0.1:8000")if err!=nil{fmt.Println("err=",err)return}//阻塞等待用户连接for{conn,err2:=listener.Accept()if err2!=nil{fmt.Println("err2",err2)return} go HandleConn(conn)}//结束时关闭监听defer listener.Close()}