2 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
這是一個(gè)echo_srv為你工作。你也需要@jnml 的建議!
實(shí)際上分配一些緩沖區(qū)來(lái)接收 - 你做了一個(gè) 0 字節(jié)的緩沖區(qū)!
在EOF上整齊地退出
只寫收到的字節(jié) msg[:n]
func echo_srv(c net.Conn, wg *sync.WaitGroup) {
defer c.Close()
defer wg.Done()
for {
msg := make([]byte, 1000)
n, err := c.Read(msg)
if err == io.EOF {
fmt.Printf("SERVER: received EOF (%d bytes ignored)\n", n)
return
} else if err != nil {
fmt.Printf("ERROR: read\n")
fmt.Print(err)
return
}
fmt.Printf("SERVER: received %v bytes\n", n)
n, err = c.Write(msg[:n])
if err != nil {
fmt.Printf("ERROR: write\n")
fmt.Print(err)
return
}
fmt.Printf("SERVER: sent %v bytes\n", n)
}
}

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
我沒(méi)有檢查它是否是罪魁禍?zhǔn)?,但在“技術(shù)分析”方面,我注意到您的代碼中有一個(gè)錯(cuò)誤:您將 a 的副本傳遞sync.Workgroup給echo_srv. 對(duì)副本所做的任何更改對(duì)原始實(shí)例都無(wú)效。
將簽名更改echo為:
func echo_srv(c net.Conn, wg *sync.WaitGroup)
然后像這樣調(diào)用它:
go echo_srv(conn, &wg)
附帶說(shuō)明:_在慣用的 Go 代碼名稱中間不使用下劃線 ( )。慣用名稱將是例如。echoSrv反而。
- 2 回答
- 0 關(guān)注
- 192 瀏覽
添加回答
舉報(bào)