亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我如何永遠從 TCP 服務器接收數據

我如何永遠從 TCP 服務器接收數據

Go
梵蒂岡之花 2022-11-23 16:07:17
我嘗試創建 TCP 客戶端以從 TCP 服務器接收數據,但是在服務器發送數據后,即使服務器發送很多數據,我也只收到一個數據,我想永遠接收數據,我不知道我的問題是什么,并且客戶: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)    }}我按照這個例子來創建 TCP 測試服務器服務器:// 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貢獻2037條經驗 獲得超6個贊

讀取需要在連接的另一端進行寫入

想永遠接收數據

然后你必須永遠發送數據。接收端有for環路,發送端沒有環路。服務器寫入一次消息并關閉連接。

服務器希望從客戶端獲取消息,但客戶端不發送

    // conn.Write([]byte("Hello World"))

那應該為msg服務器提供價值

    _, err := conn.Read(buf)

所以這兩行不匹配。

客戶端需要一個換行符,但服務器沒有發送一個

fmt.Scanln期望將每個空格分隔的值放入相應的參數中。它不捕獲空格。所以:

  1. 只有您在服務器標準輸入中輸入的第一個空格才會存儲在msg

  2. 換行符不會存儲在msg.

但是你的客戶正在做

        bytes, err := connBuf.ReadBytes('\n')

\n永遠不會來。客戶永遠不會先讀完那篇文章msg。

bufio.NewScanner將是從 stdin 收集數據的更好方法,因為您可能也想捕獲空格。不要忘記將換行符附加到您發送的每一行文本,因為客戶需要它!

工作代碼

我將這些更改放在操場上的一個工作示例中。為了讓它在這種情況下工作,我還必須進行一些其他更改。

  • 在同一進程中運行服務器和客戶端

  • 硬編碼 3 個客戶端,因此程序在有限的時間內結束

  • 硬編碼 10 在客戶端接收所以程序可以結束

  • 處理了硬編碼的 3 個服務器連接,以便程序可以結束

  • 刪除fmt.Scanln并讓服務器返回發送的原始消息(因為游樂場不提供標準輸入機制)

應該足以讓你開始。


查看完整回答
反對 回復 2022-11-23
  • 1 回答
  • 0 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號