bufio包去读TCP数据不能读全的问题


func getServerInfo(serverName string) (string, error) {
ch := make(chan string)
chError := make(chan error)
go func() {
conn, err := net.Dial("tcp", "***:2023")
if err != nil {
chError <- err
return
}
_, err = conn.Write([]byte("all_server " + serverName + "\r\n"))
if err != nil {
chError <- err
return
}
str := bufio.NewReader(conn)
result := make([]byte, 2000000)
_, err = str.Read(result)
if err != nil {
chError <- err
return
}
ch <- string(result)
return
}()
select {
case err := <-chError:
return "", err
case result := <-ch:
end_index := strings.LastIndex(result, "\n")
if (end_index > 0) {
return result[0:end_index], nil
}
return result, nil
case <-time.After(time.Second * 5):
return "", fmt.Errorf("%s", "serverName(" + serverName + ")失效")
}
}

用TCP模拟一个Telnet连接,连接上之后去做查询,最后会将查询的结果打印出来。运行的时候发现,result拿到的数据有时候全,有时候又不全,不全的时候类似这种:name:hmmob_db, serNULNULNULNULNULNUL......(ser后面的字符都丢了不知道为啥)

有没有大佬帮忙看看这种写法有什么问题吗,谢谢! 

已邀请:

要回复问题请先登录注册