第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

我如何永遠(yuǎn)從 TCP 服務(wù)器接收數(shù)據(jù)

我如何永遠(yuǎn)從 TCP 服務(wù)器接收數(shù)據(jù)

Go
梵蒂岡之花 2022-11-23 16:07:17
我嘗試創(chuàng)建 TCP 客戶端以從 TCP 服務(wù)器接收數(shù)據(jù),但是在服務(wù)器發(fā)送數(shù)據(jù)后,即使服務(wù)器發(fā)送很多數(shù)據(jù),我也只收到一個(gè)數(shù)據(jù),我想永遠(yuǎn)接收數(shù)據(jù),我不知道我的問(wèn)題是什么,并且客戶:func main() {    tcpAddr := "localhost:3333"    conn, err := net.DialTimeout("tcp", tcpAddr, time.Second*7)    if err != nil {        log.Println(err)    }    defer conn.Close()    // conn.Write([]byte("Hello World"))    connBuf := bufio.NewReader(conn)    for {        bytes, err := connBuf.ReadBytes('\n')        if err != nil {            log.Println("Rrecv Error:", err)        }        if len(bytes) > 0 {            fmt.Println(string(bytes))        }        time.Sleep(time.Second * 2)    }}我按照這個(gè)例子來(lái)創(chuàng)建 TCP 測(cè)試服務(wù)器服務(wù)器:// Handles incoming requests.func handleRequest(conn net.Conn) {    // Make a buffer to hold incoming data.    buf := make([]byte, 1024)    // Read the incoming connection into the buffer.    _, err := conn.Read(buf)    if err != nil {        fmt.Println("Error reading:", err.Error())    }    fmt.Println(buf)    // Send a response back to person contacting us.    var msg string    fmt.Scanln(&msg)    conn.Write([]byte(msg))    // Close the connection when you're done with it.    conn.Close()}
查看完整描述

1 回答

?
阿晨1998

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ù)中。它不捕獲空格。所以:

  1. 只有您在服務(wù)器標(biāo)準(zhǔn)輸入中輸入的第一個(gè)空格才會(huì)存儲(chǔ)在msg

  2. 換行符不會(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)始。


查看完整回答
反對(duì) 回復(fù) 2022-11-23
  • 1 回答
  • 0 關(guān)注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)