加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

插槽 – 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读