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

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

在 Go 中作為客戶端從服務器獲取 EOF

在 Go 中作為客戶端從服務器獲取 EOF

Go
斯蒂芬大帝 2021-10-04 09:35:05
我有一些用于自定義協議的 Go 客戶端。該協議是 lz4 壓縮的 JSON-RPC,帶有一個四字節的標頭,給出了壓縮 JSON 的長度。func ReceiveMessage(conn net.Conn) ([]byte, error) {    start := time.Now()    bodyLen := 0    body := make([]byte, 0, 4096)    buf := make([]byte, 0, 256)    for bodyLen == 0 || len(body) < bodyLen {        if len(body) > 4 {            header := body[:4]            body = body[:4]            bodyLen = int(unpack(header))        }        n, err := conn.Read(buf[:])        if err != nil {            if err != io.EOF {                return body, err            }        }        body = append(body, buf[0:n]...)        now := time.Now()        if now.Sub(start) > time.Duration(readTimeout) * time.Millisecond     {            return body, fmt.Errorf("Timed-out while reading from socket.")        }        time.Sleep(time.Duration(1) * time.Millisecond)    }    return lz4.Decode(nil, body)}客戶端:func main() {    address := os.Args[1]    msg := []byte(os.Args[2])    fmt.Printf("Sending %s to %s\n", msg, address)    conn, err := net.Dial(address)    if err != nil {        fmt.Printf("%v\n", err)        return    }    // Another library call    _, err = SendMessage(conn, []byte(msg))    if err != nil {        fmt.Printf("%v\n", err)        return    }    response, err := ReceiveMessage(conn)    conn.Close()    if err != nil {        fmt.Printf("%v\n", err)        return    }    fmt.Printf("Response: %s\n", response)}當我調用它時,我沒有得到響應,它只是超時。(如果我沒有明確忽略 EOF,它會返回 io.EOF 錯誤。)我有另一個用 Python 編寫的庫,它也適用于具有相同負載的相同端點。你馬上看到什么了嗎?
查看完整描述

2 回答

  • 2 回答
  • 0 關注
  • 394 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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