6.3 go 简单并发服务器

/*
简单并发tcp服务端
*/
package main

import (
	"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\n
			fmt.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()
	
	
	
}
发布了152 篇原创文章 · 获赞 122 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/h4241778/article/details/105499977
6.3