gpt4 book ai didi

go - net.conn.Read()的[]字节不完整

转载 作者:行者123 更新时间:2023-12-01 22:37:30 25 4
gpt4 key购买 nike

我正在使用Golang编码套接字网络,我也想使用goroutine在客户端中发送数据,并且也要使用goroutine在服务器中读取数据。
我的代码的一部分:

客户:

    buf := bufio.NewReader(file)
var toWrite [][]byte
for {
w, _, end := buf.ReadLine()
if end == io.EOF {
break
}
toWrite = append(toWrite, w)
}

var wg sync.WaitGroup
wg.Add(len(toWrite))

for _, word := range toWrite {
w := word

go func() {
defer wg.Done()
conn.Write(append(w, byte('\n')))
log.Info(string(w), "\n")
}()

}
wg.Wait()


服务器:
    for {
conn, err := listen.Accept()
defer conn.Close()

if err != nil {
log.Fatal("accept err: ", err)
break
}
go func() {
data := make([]byte, 1024)
for {
_, err := conn.Read(data)
if err != nil {
break
}
log.Info(string(data))
}
}()
}


但是,当我在终端中运行它们时,有时会显示一些不完整的单词
INFO[2019-10-15T23:36:11+08:00] increased
based
Up
p // no "p" in my file
Up
Up
Up
Up

Up
Up
Up
Up
Up
Up
Up

(在客户端打开的文件中有很多“向上”)
有办法解决吗?

最佳答案

conn.read()返回其实际能够读取的字节数。从read()返回的内容取决于很多因素,包括tcp缓冲区等。如果要打印出格式化的文本,则可以需要读到“\ n”,然后继续阅读下一行。 TCP提供来自对等端的连续数据流。您需要找到一种方法来读取正确的字节以及正确的字节数。

关于go - net.conn.Read()的[]字节不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58398540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com