为了账号安全,请及时绑定邮箱和手机立即绑定

有人可以告诉我 golang 中 io.ReadFull 和 bytes.

有人可以告诉我 golang 中 io.ReadFull 和 bytes.

Go
慕森王 2021-07-15 14:09:52
我在实现一个tcp c/s demo的时候遇到了一个问题,我发现在服务器端使用io.ReadFull(conn, aByteArr)或者bytes.Buffer.ReadFrom(conn)的时候很奇怪,好像服务器不会t 读取连接中的数据,直到客户端退出,换句话说,服务器卡住了,但我可以使用基本的 conn.Read(aBuffer) 读取数据。为什么这两种方法这么奇怪?因为我想让我的服务器处理任意大小的数据,所以我不喜欢使用基本的方式,我的意思是 conn.Read(),它必须先制作一个指定大小的字节切片。请帮我。我可以给我的代码:客户端:package mainimport (    "net"    "fmt"    "bufio"    "time"    "runtime")func send(s string, ch chan string){    conn, err := net.Dial("tcp", ":4000")    if err != nil {        fmt.Println(err)    }       fmt.Fprintf(conn, s)    fmt.Println("send: ", s)                                                                                                                                                                                          /*      s := "server run"    conn.Write([]byte(s))    */    status, err := bufio.NewReader(conn).ReadString('\n')    if err != nil {        fmt.Println("error: ", err)    }       ch <- status }func main(){    runtime.GOMAXPROCS(runtime.NumCPU())    fmt.Println("cpu: ", runtime.NumCPU())    ch := make(chan string, 5)    timeout := time.After(10 * time.Second)    i := 0    for{        go send(fmt.Sprintf("%s%d", "client", i), ch)         i++         select {            case ret := <-ch:                fmt.Println(ret)            case <-timeout:                fmt.Println("time out")                return        }       }   }
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 603 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信