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

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

多個串行請求導致空緩沖區(qū)

多個串行請求導致空緩沖區(qū)

Go
阿晨1998 2022-06-01 17:43:45
在 osx 上的 localhost 上運行的第一個 TCP 連接始終會正確解析發(fā)送給它的二進制文件。后續(xù)請求丟失二進制數(shù)據(jù),只看到第一個字節(jié) [8]。我如何設(shè)置閱讀器失???package mainimport (        "fmt"        "log"        "net"        "os"        "app/src/internal/handler"        "github.com/golang-collections/collections/stack")func main() {        port := os.Getenv("SERVER_PORT")        s := stack.New()        ln, err := net.Listen("tcp", ":8080")        if err != nil {                log.Fatalf("net.Listen: %v", err)        }        fmt.Println("Serving on " + port)        for {                conn, err := ln.Accept()                // defer conn.Close()                if err != nil {                        log.Fatal("ln.Accept")                }                go handler.Handle(conn, s)        }}package handlerimport (        "fmt"        "io"        "log"        "net"        "github.com/golang-collections/collections/stack")func Handle(c net.Conn, s *stack.Stack) {        fmt.Printf("Serving %s\n", c.RemoteAddr().String())        buf := make([]byte, 0, 256)        tmp := make([]byte, 128)        n, err := c.Read(tmp)        if err != nil {                if err != io.EOF {                        log.Fatalf("connection Read() %v", err)                }                return        }        buf = append(buf, tmp[:n]...)}日志:Serving [::1]:51699 ------------- value ---------------:QCXhoy5tBuffer Length: 9. First Value: 8Serving [::1]:51700------------- value ---------------:Buffer Length: 1. First Value: 8Serving [::1]:51701測試發(fā)送過來:push random string:QCXhoy5tpush random string:GPh0EnbSpush random string:4kJ0wN0R
查看完整描述

1 回答

?
慕標5832272

TA貢獻1966條經(jīng)驗 獲得超4個贊

Reader的文檔說:


Read reads up to len(p) bytes into p. It returns the number of bytes read (0 <= n 

<= len(p)) and any error encountered. Even if Read returns n < len(p), it may use 

all of p as scratch space during the call. If some data is available but not 

len(p) bytes, Read conventionally returns what is available instead of waiting 

for more.

因此,問題的最可能原因是 Read 正在返回可用的數(shù)據(jù)(在本例中為單個字符)。您可以通過使用ioutil.ReadAll或在循環(huán)中執(zhí)行讀取來解決此問題(數(shù)據(jù)被添加到緩沖區(qū)的事實使它看起來像是最初的意圖),例如:


for {

    n, err := c.Read(tmp)

    if err != nil {

        if err != io.EOF {

            // Note that data might have also been received - you should process that

            // if appropriate.

            log.Fatalf("connection Read() %v", err)

            return

        }

        break // All data received so process it

    }

    buf = append(buf, tmp[:n]...)

}

注意:不保證收到任何數(shù)據(jù);您應(yīng)該在嘗試訪問它之前檢查長度(即buf[0]可能會恐慌)


查看完整回答
反對 回復(fù) 2022-06-01
  • 1 回答
  • 0 關(guān)注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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