用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

回到顶部