用Golang net.Conn.Read读取整个数据
因此,我在Go中构建了一个网络应用程序,我看到它Conn.Read
读入了我创建时使用的有限字节数组,make([]byte, 2048)
现在的
是我不知道内容的确切长度,因此它可能是太多或不足。
我的问题是我如何才能读取准确的数据量。我认为我必须使用bufio
,但不确定。
回答:
这在很大程度上取决于您要执行的操作以及所期望的数据类型,例如,如果您只想读到EOF,则可以使用以下内容:
func main() { conn, err := net.Dial("tcp", "google.com:80")
if err != nil {
fmt.Println("dial error:", err)
return
}
defer conn.Close()
fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n")
buf := make([]byte, 0, 4096) // big buffer
tmp := make([]byte, 256) // using small tmo buffer for demonstrating
for {
n, err := conn.Read(tmp)
if err != nil {
if err != io.EOF {
fmt.Println("read error:", err)
}
break
}
//fmt.Println("got", n, "bytes.")
buf = append(buf, tmp[:n]...)
}
fmt.Println("total size:", len(buf))
//fmt.Println(string(buf))
}
// edit:出于完整性考虑,@ fabrizioM提出了很棒的建议,这完全让我无视:
func main() { conn, err := net.Dial("tcp", "google.com:80")
if err != nil {
fmt.Println("dial error:", err)
return
}
defer conn.Close()
fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n")
var buf bytes.Buffer
io.Copy(&buf, conn)
fmt.Println("total size:", buf.Len())
}
以上是 用Golang net.Conn.Read读取整个数据 的全部内容, 来源链接: utcz.com/qa/435850.html