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  }