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

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

golang tcp套接字在立即寫入后不發送消息

golang tcp套接字在立即寫入后不發送消息

Go
函數式編程 2021-06-10 18:13:11
我的GO版本是1.1.1服務器在連接關閉后收到消息,但設置了 NoDelay。有什么不對addr, _ := net.ResolveTCPAddr("tcp", "localhost:5432")conn, err := net.DialTCP("tcp", nil, addr)defer conn.Close()if err != nil {    fmt.Println("connect fail")    return}err = conn.SetNoDelay(true)if err != nil {    fmt.Println(err.Error())}for {    var message string    _, err := fmt.Scanln(&message)    if err != nil && err.Error() != "unexpected newline" {        fmt.Println("input finished", err)        break    }    if message == "" {        fmt.Println("no input, end")        break    }    // message = fmt.Sprintf("%s\n",message)     //fmt.Fprintf(conn, message) // send immediately but following message won't send any more    conn.Write([]byte(message)) // won't send until connection close}
查看完整描述

2 回答

?
慕運維8079593

TA貢獻1876條經驗 獲得超5個贊

您的代碼似乎沒有任何嚴重錯誤,所以我猜測錯誤出在服務器端。


如果您在端口 5432 上創建本地 TCP 服務器,您可以對此進行測試。


嘗試運行以下服務器代碼,然后針對它測試您的客戶端代碼。它只是將所有接收到的數據回顯到標準輸出。


package main


import (

    "io"

    "log"

    "net"

    "os"

)


func main() {

    l, err := net.Listen("tcp", "localhost:5432")

    if err != nil {

        log.Fatal(err)

    }

    defer l.Close()

    for {

        conn, err := l.Accept()

        if err != nil {

            log.Fatal(err)

        }

        go func(c net.Conn) {

            defer c.Close()

            io.Copy(os.Stdout, c)

        }(conn)

    }

}

按下回車鍵后,您應該會看到發送到客戶端的每一行都被打印出來(沒有換行符)。


查看完整回答
反對 回復 2021-06-21
?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

問題出在服務器端。


func handleConnection(conn net.Conn) {

// I didn't put it in for loop

message, err := bufio.NewReader(conn).ReadString('\n')

}


查看完整回答
反對 回復 2021-06-21
  • 2 回答
  • 0 關注
  • 295 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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