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、如果发送端是长连接、需要在数据头约定数据的长度,然后读取到指定长度后将数据进行异步处理
#4
更多评论
![iShot2021-12-23 09.58.05.png](https://static.studygolang.com/211223/9890f9194b579b43f46b27498e2c4aca.png)
#1