func main() { l, err := net.Listen("tcp", ":8095") if err != nil { log.Fatal(err) } defer func(l net.Listener) { err := l.Close() if err != nil { } }(l) fmt.Println("init success ........") for { conn, err := l.Accept() if err != nil { log.Fatal(err) } //go handleMsg(conn) buff := make([]byte, 1024) msg := "" for { n, err := conn.Read(buff) if err != nil { return } s := string(buff[:n]) msg = msg + s // msg = msg+string(buff[:n]) //fmt.Print(string(buff[:n])) } } }
你将conn
链接的读取直接使用for循环放在了tcp
监听里面、会造成监听阻塞、需要把read逻辑使用异步处理
1、如果发送端发送完数据会关闭连接的话,可以判断 EOF
错误、然后在处理拼接后的数据以确定数据传输完成。
2、如果发送端是长连接、需要在数据头约定数据的长度,然后读取到指定长度后将数据进行异步处理
更多评论