插槽 – golang:从套接字读取时意外的EOF
发布时间:2020-12-16 19:22:52 所属栏目:大数据 来源:网络整理
导读:我有以下简单的golang程序来下载Google的隐私政策.不幸的是,即使文件长得多,它总是在错误的EOF之后读取6861字节而崩溃.为什么? package mainimport "net"import "fmt"import "io"import "os"func die(msg string,s os.Error) { fmt.Printf("%s crashed: %v
我有以下简单的golang程序来下载Google的隐私政策.不幸的是,即使文件长得多,它总是在错误的EOF之后读取6861字节而崩溃.为什么?
package main import "net" import "fmt" import "io" import "os" func die(msg string,s os.Error) { fmt.Printf("%s crashed: %vn",msg,s) os.Exit(1) } func main() { fd,err := net.Dial("tcp","google.com:80") if err != nil { die("dial",err) } req := []byte("GET /intl/en/privacy/ HTTP/1.0rnHost: www.google.comrnrn") _,err = fd.Write(req) if err != nil { die("dial write",err) } buf := make([]byte,1024) nr := 1 for nr > 0 { nr,err = io.ReadFull(fd,buf) if err != nil { die("dial read",err) } fmt.Printf("read %dn",nr) } } 输出: read 1024 read 1024 read 1024 read 1024 read 1024 read 1024 dial read crashed: unexpected EOF
函数io.ReadFull(fd,buf)只有当您知道fd可以至少提供len(buf)字节时才能使用.
相反,请尝试以下操作: var buf bytes.Buffer nr,err := io.Copy(&buf,fd) if err != nil { die("dial read",err) } 如果复制到一个文件,使用os.File而不是bytes.Buffer. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |