一个TCP服务端能够同时链接不少个客户端,例如世界各地的用户使用本身电脑上的浏览器访问淘宝网。由于Go语言中建立多个goroutine实现并发很是方便和高效,因此咱们能够每创建一次连接就建立一个goroutine去处理。浏览器
TCP服务端程序的处理流程:并发
package main import ( "fmt" "net" "os" ) func errFunc(err error,info string){ if err !=nil{ fmt.Println(info,err) os.Exit(1) //将当前进程结束 } } func main(){ listen,err :=net.Listen("tcp","127.0.0.1:8000") errFunc(err,"connet net failed") defer listen.Close() conn,err :=listen.Accept() errFunc(err,"Accept err") defer conn.Close() buf :=make([]byte,4096) n,err :=conn.Read(buf) if n ==0{ return } errFunc(err,"conn Read") fmt.Println(string(buf[:n])) conn.Write([]byte(string(buf[:n]))) // 发送数据 }
http请求包:tcp
请求行:请求方法(空格)请求文件URL(空格)协议版本
请求头:语法格式:key:value
空行:\r\n ---请求
请求包体blog