> 文章列表 > golang tcp编程

golang tcp编程

golang tcp编程

 服务端实现

package mainimport ("fmt""io""net"
)func process(conn net.Conn) {defer conn.Close()for {//创建一个切片buf := make([]byte, 1024)//1.等待客户端通过conn发送信息学//2.如果客户端没有wirte[发送],那么协程就阻塞在这里//fmt.Printf("服务器在等待客户端%s 发送信息\\n",conn.RemoteAddr().String())n, err := conn.Read(buf)if err != nil {if err == io.EOF {fmt.Println("the connetction is closed")conn.Close()} else {fmt.Printf("Read Error: %s\\n", err)}return}//3.显示客户端发送的内容到服务器的终端fmt.Printf("客户端%s 发送信息%s\\n", conn.RemoteAddr().String(), string(buf[:n]))}
}func main() {fmt.Println("服务器开始监听")listen, err := net.Listen("tcp", "0.0.0.0:8888")if err != nil {fmt.Println("listen err=", err)return}defer listen.Close()//循环等待客户端来连接for {fmt.Println("等待客户端来连接")conn, err := listen.Accept()if err != nil {fmt.Println("Accept err=", err)} else {fmt.Printf("Accept suc con=%v 客户端ip=%v\\n", conn, conn.RemoteAddr().String())}go process(conn)}
}

 客户端实现

package mainimport ("bufio""fmt""net""os""strings"
)func main() {conn, err := net.Dial("tcp", "127.0.0.1:8888")if err != nil {fmt.Println("client dial err=", err)return}defer conn.Close()for {fmt.Println("请输入信息,回车结束输入")reader := bufio.NewReader(os.Stdin)//终端读取用户回车,并准备发送给服务器line, err := reader.ReadString('\\n')if err != nil {fmt.Println("readString err=", err)}line = strings.Trim(line, "\\r\\n")if line == "exit" {fmt.Println("客户端退出...")break}line = strings.TrimSpace(line)//将line发送给服务器n, err := conn.Write([]byte(line))if err != nil {fmt.Println("conn.Write err=", err)}fmt.Printf("发送的内容了%d文字\\n", n)}
}