我在實現(xiàn)一個tcp c/s demo的時候遇到了一個問題,我發(fā)現(xiàn)在服務(wù)器端使用io.ReadFull(conn, aByteArr)或者bytes.Buffer.ReadFrom(conn)的時候很奇怪,好像服務(wù)器不會t 讀取連接中的數(shù)據(jù),直到客戶端退出,換句話說,服務(wù)器卡住了,但我可以使用基本的 conn.Read(aBuffer) 讀取數(shù)據(jù)。為什么這兩種方法這么奇怪?因為我想讓我的服務(wù)器處理任意大小的數(shù)據(jù),所以我不喜歡使用基本的方式,我的意思是 conn.Read(),它必須先制作一個指定大小的字節(jié)切片。請幫我。我可以給我的代碼:客戶端: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 回答
- 0 關(guān)注
- 662 瀏覽
添加回答
舉報
0/150
提交
取消