Server 端

要点

1、net.Listen() 监听端口

2、listen.Accept() 间裂socket 连接

3、conn.Read() 循环读取数据

package main

import (
   "fmt"
   "net"
)

func process(conn net.Conn){
   defer conn.Close()
   for {
      var buf [128]byte
      n ,err := conn.Read(buf[:])
      if err != nil {
         fmt.Println("Read from tcp server failed,err:",err)
         break
      }
      data := string(buf[:n])
      fmt.Printf("Recived from client,data:%s\n",data)
   }
}

func main() {
   // 监听TCP 服务端口
   listener,err := net.Listen("tcp","0.0.0.0:9090")
   if err != nil {
      fmt.Println("Listen tcp server failed,err:",err)
      return
   }

   for{
      // 建立socket连接
      conn,err := listener.Accept()
      if err != nil {
         fmt.Println("Listen.Accept failed,err:",err)
         continue
      }

      // 业务处理逻辑
      go process(conn)
   }
}


client端

要点

1、net.Dial() 建立连接

2、bufio.NewReader(os.Stdin) 从标准输出流获取内容

3、reader.ReadString() 循环读取数据,直到遇到换行符

4、遇到字符串“Q”终止连接

5、conn.Write() 给服务器响应信息

package main

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

func main() {
   // 连接服务器
   conn,err := net.Dial("tcp","127.0.0.1:9090")
   if err != nil {
      fmt.Println("Connect to TCP server failed ,err:",err)
      return
   }

   // 读取命令行输入
   inputReader := bufio.NewReader(os.Stdin)

   // 一直读取直到遇到换行符
   for {
      input,err := inputReader.ReadString('\n')
      if err != nil {
         fmt.Println("Read from console failed,err:",err)
         return
      }

      // 读取到字符"Q"退出
      str := strings.TrimSpace(input)
      if str == "Q"{
         break
      }
      
      // 响应服务端信息
      _,err = conn.Write([]byte(input))
      if err != nil{
         fmt.Println("Write failed,err:",err)
         break
      }
   }
   
}