server1: package main

import (
	"fmt"
	"net"
)

func main() {
	l, err := net.Listen("tcp", "127.0.0.1:9876")
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println("服务器等待客户端连接")
	conn, err := l.Accept()
	if err != nil {
		fmt.Println(err)
	}
	defer conn.Close()
	fmt.Println("客户端建立连接 ")
	buf := make([]byte, 4096)
	n, err := conn.Read(buf)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(string(buf[:n]))
	conn.Write(buf[:n])
}

client1:

package main

import (
	"fmt"
	"net"
)

func main() {
	conn, err := net.Dial("tcp", "127.0.0.1:9876")
	if err != nil {
		fmt.Println(err)
	}
	defer conn.Close()
	conn.Write([]byte("are you ready"))
	buf := make([]byte, 4096)
	n, err := conn.Read(buf)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(string(buf[:n]))
}

sever2:

package main

import (
	"fmt"
	"io"
	"net"
	"runtime"
	"strings"
)

func process(conn net.Conn) {

	// io.Copy(conn, conn)
	buf := make([]byte, 4096)
	for {
		n, err := conn.Read(buf)
		if err != nil {
			if err == io.EOF {
				fmt.Println("客户端断开连接")
				runtime.Goexit()
			} else {
				fmt.Println(err)
				runtime.Goexit()
			}
			//break
		}
		fmt.Println("接收到消息:", string(buf[:n]))
		conn.Write([]byte(strings.ToUpper(string(buf[:n]))))
		//fmt.Println(strings.ToUpper(string(buf[:n])))
	}
}

func main() {
	l, err := net.Listen("tcp", "127.0.0.1:9876")
	if err != nil {
		fmt.Println(err)
	}
	defer l.Close()

	for {
		conn, err := l.Accept()
		if err != nil {
			fmt.Println(err)
			continue
		}
		defer conn.Close()
		fmt.Println(conn.RemoteAddr())
		go process(conn)
	}
}

client2:

package main

import (
	"bufio"
	"fmt"
	"net"
	"os"
	"strings"
)

func main() {
	conn, err := net.Dial("tcp", "127.0.0.1:9876")
	if err != nil {
		fmt.Println(err)
	}
	defer conn.Close()

	for {
		//strs :=""
		// fmt.Scanln(&strs) 空格有问题
		//strs := make([]byte, 4096)

		//n, err := os.Stdin.Read(strs)
		fmt.Println("请输入要发送的消息:")
		str, err := bufio.NewReader(os.Stdin).ReadString('\n')
		if err != nil {
			fmt.Println(err)
		}
		str = strings.TrimSpace(str)

		//fmt.Println("发送前", , "展示")
		//fmt.Println("a", str, "b")
		if str == "Q" {
			fmt.Println("接收到退出命令,退出客户端")
			break
		}
		conn.Write([]byte(str))
		buf := make([]byte, 4096)
		n, err := conn.Read(buf)
		if err != nil {
			fmt.Println(err)
			break
		}
		defer conn.Close()
		fmt.Println("接收到消息:", string(buf[:n]))
	}

}