请帮助我了解观察到的从套接字读取的行为。
在实验中,发送方总是发送相同的行,以 '\n' 结尾,然后关闭套接字的写入端。
接收端的此代码按预期工作,打印每一行:
rdr := bufio.NewReader(sock)
for {
b, err := rdr.ReadBytes('\n')
if err != nil {
break
}
fmt.Print(string(b))
}
然而,这段代码
n, err := io.Copy(os.Stdout, sock)
有时会从数据块的开头跳过随机数量的行,并且只打印其余的行(n相应地更改,并且err始终为零)。
Thesock是一种自定义类型,它抽象了net.TCPConn和tls.Conn,否则将在整个代码库中使用,而不会出现问题。
为什么 read by 开头的行io.Copy有时会丢失?
蝴蝶刀刀
相关分类