【发布时间】:2016-04-15 12:19:56
【问题描述】:
我有一个连接,是这样创建的:
conn, err = net.Dial("tcp", "127.0.0.1:20000")
我尝试通过两种方式读取此连接。我认为他们都必须工作,但第一个选项没有。
这是第一种方法:
var bytes []byte
for i := 0; i < 4; i++ {
conn.Read(bytes)
}
fmt.Printf("%v", bytes)
这个方法的输出是:
[]
这也是同样的事情,用bufio.Reader 完成:
func readResponse(conn net.Conn) (response string, err error) {
reader := bufio.NewReader(conn)
_, err = reader.Discard(8)
if err != nil {
return
}
response, err = reader.ReadString('\n')
return
}
该函数返回TCP连接另一端的服务器给出的响应。
为什么bufio.Reader.Read() 有效,而net.Conn.Read() 无效?
【问题讨论】:
-
嗯,这很明显:
Read读取到提供的[]byte。您的[]byte是空的,它的长度为零,并且整个零长度已被填充。因此,从技术上讲,您的Readcall 可以正常工作,因为它用来自连接的数据完全填充了提供的字节片。你参加了围棋巡回赛? -
谢谢。我对很多概念都很陌生,所以我在游览中或第一次查看函数文档时读到的一些内容在我没有意识到的情况下超出了我的脑海。很抱歉让您感到不快。
标签: go connection bufferedreader reader