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

zhougb3 · 2020年01月12日 · 358 次阅读


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 后面的字符都丢了不知道为啥)

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

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册