读取直到服务器关闭连接

时间:2012-11-01 22:54:32

标签: connection go

我正在尝试从服务器读取一个JSON编码的字节,该字节将缩进,但长度不可预测,并且没有明显的终止字节。我想将整个服务器响应读入一个字节。服务器将关闭连接。是否可以使用net

执行此操作

2 个答案:

答案 0 :(得分:4)

作为@minikomi答案的补充,我想补充一点,如果您确定从服务器返回的字节是JSON编码的,那么就有一个很好的包encoding/json

http://golang.org/pkg/encoding/json/

如果您使用解码器直接从连接解码,有时不会返回错误。您可能希望使用fmt.Printf("%v\n", whateverDecodedFromTheConnection)来查看连接关闭时解码器获取的内容。

例如,在我的情况下,使用encoding/gob解码器将来自tcp连接的消息解码为定义为的结构:

type MessageType struct {
    Type uint8
}

关闭连接后,decoder.Decode(&buffer)会返回{0}。这可能不是常见的情况,但需要注意一些事情。

答案 1 :(得分:2)

请查看http://golang.org/pkg/net/http/

上的文档

http Get将返回Response结构,其结构为io.ReadCloser

然后,您可以使用ioutil.ReadAll读取对字节数组的整个响应。

resp, err := http.Get("http://example.com/")
if err != nil {
    // handle error
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)