1 回答

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
讀取需要在連接的另一端進(jìn)行寫(xiě)入
想永遠(yuǎn)接收數(shù)據(jù)
然后你必須永遠(yuǎn)發(fā)送數(shù)據(jù)。接收端有for
環(huán)路,發(fā)送端沒(méi)有環(huán)路。服務(wù)器寫(xiě)入一次消息并關(guān)閉連接。
服務(wù)器希望從客戶端獲取消息,但客戶端不發(fā)送
// conn.Write([]byte("Hello World"))
那應(yīng)該為msg
服務(wù)器提供價(jià)值
_, err := conn.Read(buf)
所以這兩行不匹配。
客戶端需要一個(gè)換行符,但服務(wù)器沒(méi)有發(fā)送一個(gè)
fmt.Scanln
期望將每個(gè)空格分隔的值放入相應(yīng)的參數(shù)中。它不捕獲空格。所以:
只有您在服務(wù)器標(biāo)準(zhǔn)輸入中輸入的第一個(gè)空格才會(huì)存儲(chǔ)在
msg
換行符不會(huì)存儲(chǔ)在
msg
.
但是你的客戶正在做
bytes, err := connBuf.ReadBytes('\n')
\n
永遠(yuǎn)不會(huì)來(lái)。客戶永遠(yuǎn)不會(huì)先讀完那篇文章msg
。
bufio.NewScanner
將是從 stdin 收集數(shù)據(jù)的更好方法,因?yàn)槟赡芤蚕氩东@空格。不要忘記將換行符附加到您發(fā)送的每一行文本,因?yàn)榭蛻粜枰?/p>
工作代碼
我將這些更改放在操場(chǎng)上的一個(gè)工作示例中。為了讓它在這種情況下工作,我還必須進(jìn)行一些其他更改。
在同一進(jìn)程中運(yùn)行服務(wù)器和客戶端
硬編碼 3 個(gè)客戶端,因此程序在有限的時(shí)間內(nèi)結(jié)束
硬編碼 10 在客戶端接收所以程序可以結(jié)束
處理了硬編碼的 3 個(gè)服務(wù)器連接,以便程序可以結(jié)束
刪除
fmt.Scanln
并讓服務(wù)器返回發(fā)送的原始消息(因?yàn)橛螛?lè)場(chǎng)不提供標(biāo)準(zhǔn)輸入機(jī)制)
應(yīng)該足以讓你開(kāi)始。
- 1 回答
- 0 關(guān)注
- 109 瀏覽
添加回答
舉報(bào)