github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/00_net/tcp/server/server_tcp.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "net" 6 "os" 7 ) 8 9 func main() { 10 port := ":5000" 11 //在Go语言中通过ResolveTCPAddr获取一个TCPAddr 12 tcpAddr, err := net.ResolveTCPAddr("tcp4", port) 13 CheckErr(err) 14 listener, err := net.ListenTCP("tcp", tcpAddr) // 监听某个端口 15 CheckErr(err) 16 for { 17 conn, err := listener.Accept() 18 if err != nil { 19 continue 20 } 21 go handleClient(conn) 22 } 23 24 } 25 26 // 处理客户端的请求 27 func handleClient(conn net.Conn) { 28 defer conn.Close() 29 var buf [512]byte 30 for { 31 n, err := conn.Read(buf[0:]) // 相等于每次最多读 512字节 , n表示读到的字节数 32 if err != nil { 33 return 34 } 35 remoteAddr := conn.RemoteAddr() 36 fmt.Println("Receive from client", remoteAddr.String(), string(buf[0:n])) 37 _, err2 := conn.Write([]byte("hi client")) 38 if err2 != nil { 39 return 40 } 41 } 42 } 43 44 func CheckErr(err error) { 45 if err != nil { 46 fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) 47 os.Exit(1) 48 } 49 }