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 } } }