创立工程文件
mkdir tcpServer tcpClientcd tcpServer && go mod init tcpServer && touch server.gocd ../tcpClient && go mod init tcpClient && touch client.go
服务端
// server.gopackage mainimport( "net" "fmt" "bufio")func main(){ // get listener listener, err := net.Listen("tcp", ":8080") if err != nil{ fmt.Println("listen failed: ") panic(err) } fmt.Println("tcp server running at 127.0.0.1:8080...") for { // get connection conn, err := listener.Accept() if err != nil{ fmt.Println("accept failed: ") panic(err) } process(conn) }}func process(conn net.Conn){ defer conn.Close() for { reader := bufio.NewReader(conn) var buf [128]byte n, err := reader.Read(buf[:]) if err != nil{ fmt.Println("read from client failed:") panic(err) } recvStr := string(buf[:n]) fmt.Println("receive from client: ", recvStr) conn.Write([]byte(recvStr + " from server")) }}
$ go run server.go tcp server running at 127.0.0.1:8080...
客户端
// client.gopackage mainimport( "os" "fmt" "net" "bufio" "strings")func main(){ // create conn to server :8080 conn, err := net.Dial("tcp", ":8080") if err != nil{ fmt.Println("connnect to server failed: ") panic(err) } defer conn.Close() inputReader := bufio.NewReader(os.Stdin) for { input, _ := inputReader.ReadString('\n') input_data := strings.Trim(input, "\r\n") if strings.ToUpper(input_data) == "Q"{ return } // send data to server _, err := conn.Write([]byte(input_data)) if err != nil{ fmt.Println("send data to server failed: ", err) return } // receive data from server buf := [512]byte{} n, err := conn.Read(buf[:]) if err != nil{ fmt.Println("receive data from server failed: ", err) return } fmt.Println(string(buf[:n])) }}
$ go run client.goconnect to tcp server 0.0.0.0:8080...
测试
$ go run client.goconnect to tcp server 0.0.0.0:8080...pingping from serveryesyes from serverokok from server
$ go run server.gotcp server running at 127.0.0.1:8080...receive from client: pingreceive from client: yesreceive from client: ok