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

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

向 TCP 服務(wù)器發(fā)送多個(gè)請(qǐng)求失敗

向 TCP 服務(wù)器發(fā)送多個(gè)請(qǐng)求失敗

Go
胡子哥哥 2023-07-10 10:52:31
我試圖向 Go 中的 TCP 服務(wù)器發(fā)送多個(gè)請(qǐng)求,但由于某種原因,第二個(gè)請(qǐng)求從未發(fā)送,即使它與第一個(gè)請(qǐng)求相同。這是服務(wù)器:func StartServer(host string) {    l, err := net.Listen("tcp", host)    log.Println("Starting server on:", host)    if err != nil {        fmt.Println(err)        os.Exit(1)    }    defer l.Close()    log.Println("Server is running...")    for {        // Listen for an incoming connection.        conn, err := l.Accept()        if err != nil {            log.Fatal("Error accepting: ", err.Error())        }        // Handle connections in a new goroutine.        fmt.Println("got a request")        go handleRequest(conn)    }}這是客戶端中將請(qǐng)求發(fā)送到服務(wù)器的函數(shù):func (u *User) ConnectToServer(host string, partner string) {    conn, _ := net.Dial("tcp", host)    fmt.Fprintf(conn, "message1\n")    fmt.Fprintf(conn, "message2\n")}編輯:在handleRequest函數(shù)中我讀取輸入如下: // Handles incoming requests.func handleRequest(conn net.Conn) {    rec, err := bufio.NewReader(conn).ReadString('\n')    if err != nil {        log.Println("Error reading:", err.Error())    }    log.Println("Got message: ", rec)    // Send a response back to person contacting us.    conn.Write([]byte("Message received."))    // conn.Close()}根據(jù)文檔,在檢測(cè)到第一個(gè)換行符之前僅采用第一部分,因此我相信第二條消息因此被忽略。我怎樣才能閱讀這兩條消息?我應(yīng)該更改客戶端中的分隔符嗎?
查看完整描述

2 回答

?
神不在的星期二

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊

鑒于客戶端發(fā)送多行,服務(wù)器應(yīng)該讀取多行。使用bufio.Scanner讀取行:


func handleRequest(conn net.Conn) {

? ?defer conn.Close()

? ?scanner := bufio.NewScanner(conn)

? ?for scanner.Scan() {

? ? ? fmt.Printf("Got message: %s\n", scanner.Bytes())

? ? ? conn.Write([]byte("Message received."))

? ?}

? ?if err := scanner.Err(); err != nil {

? ? ? fmt.Printf("error reading connection: %v\n", err)

? ?}

}

關(guān)于代碼的一些注釋:


為了防止資源泄漏,該函數(shù)在返回時(shí)關(guān)閉連接。

掃描儀循環(huán)因讀取連接錯(cuò)誤而中斷。如果錯(cuò)誤不是 io.EOF,則該函數(shù)會(huì)記錄該錯(cuò)誤。

bufio.Reader也可以用來讀取行,但是 bufio.Scanner 更容易使用。


查看完整回答
反對(duì) 回復(fù) 2023-07-10
?
拉丁的傳說

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊

在 中handleRequest(),您調(diào)用ReadString()bufio Reader。讓我們看一下文檔:

ReadString 讀取直到輸入中第一次出現(xiàn) delim,返回包含分隔符之前的數(shù)據(jù)的字符串。如果 ReadString 在找到分隔符之前遇到錯(cuò)誤,它將返回錯(cuò)誤之前讀取的數(shù)據(jù)以及錯(cuò)誤本身(通常是 io.EOF)。當(dāng)且僅當(dāng)返回的數(shù)據(jù)不以 delim 結(jié)尾時(shí),ReadString 返回 err != nil。對(duì)于簡(jiǎn)單的使用,掃描儀可能更方便。

考慮到您發(fā)送的數(shù)據(jù)包以 終止,您必須在同一個(gè)讀取器上\n調(diào)用兩次。ReadString()您可能希望ReadString()循環(huán)調(diào)用,直到返回錯(cuò)誤。io.EOF那么一定要分清楚。

查看完整回答
反對(duì) 回復(fù) 2023-07-10
  • 2 回答
  • 0 關(guān)注
  • 194 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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