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

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

TCP 套接字:消息接收來(lái)自先前連接的消息的一部分

TCP 套接字:消息接收來(lái)自先前連接的消息的一部分

Go
慕尼黑8549860 2023-02-28 21:20:37
當(dāng)來(lái)自上一個(gè)連接的消息的部分轉(zhuǎn)到下一個(gè)消息時(shí),我不小心發(fā)現(xiàn)了一個(gè)錯(cuò)誤。我有一個(gè)帶客戶端的基本服務(wù)器。我已經(jīng)刪除了所有錯(cuò)誤處理以避免示例過(guò)多膨脹。我也用 替換了一些Printf,time.Sleep因?yàn)槲覜](méi)有機(jī)會(huì)及時(shí)斷開(kāi)連接來(lái)重現(xiàn)錯(cuò)誤,因?yàn)樗x取數(shù)據(jù)的速度太快了。“包”是一個(gè)簡(jiǎn)單的結(jié)構(gòu),前 4 個(gè)字節(jié)是長(zhǎng)度,然后是內(nèi)容。客戶端代碼:package mainimport (    "encoding/binary"    "fmt"    "net")func main() {    conn, _ := net.Dial("tcp", "0.0.0.0:8081")    defer conn.Close()    str := "msadsakdjsajdklsajdklsajdk"    // Creating a package    buf := make([]byte, len(str)+4)    copy(buf[4:], str)    binary.LittleEndian.PutUint32(buf[:4], uint32(len(str)))    for {        _, err := conn.Write(buf)        if err != nil {            fmt.Println(err)            return        }    }}因此,出于某種原因,int32Buf接收前一條消息 (d, k) 的最后 2 個(gè)字節(jié)和長(zhǎng)度的前 2 個(gè)字節(jié),從而產(chǎn)生[107, 100, 26, 0]字節(jié)切片,而它應(yīng)該是[26, 0, 0, 0]. 當(dāng)然,其余數(shù)據(jù)包含剩余的兩個(gè)零:
查看完整描述

1 回答

?
浮云間

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

     conn.Read(int32Buf)

您需要檢查 conn.Read 的返回值并將其與您的預(yù)期進(jìn)行比較。您在代碼中假設(shè) conn.Read 將始終完全填充給定的 4 字節(jié)緩沖區(qū)。

這個(gè)假設(shè)是錯(cuò)誤的,即它實(shí)際上可能讀取更少的數(shù)據(jù)。具體來(lái)說(shuō),它可能只讀取 2 個(gè)字節(jié),在這種情況下,您最終會(huì)\x1a\x00\x00\x00在緩沖區(qū)中得到仍然轉(zhuǎn)換為 26 的消息長(zhǎng)度。只是,消息的前 2 個(gè)字節(jié)實(shí)際上是長(zhǎng)度的最后 2 個(gè)字節(jié)不包括在最后一次閱讀中。這意味著在讀取 26 個(gè)字節(jié)后,它不會(huì)讀取完整的消息。2 個(gè)字節(jié)是 leg 并將包含在下一條消息中 - 這就是您觀察到的。

要確保讀取緩沖區(qū)的確切大小,請(qǐng)檢查 conn.Read 的返回值或使用io.ReadFull。完成此操作后,它會(huì)按預(yù)期工作(來(lái)自評(píng)論):

好的,現(xiàn)在它完美無(wú)缺

那么為什么這只發(fā)生在新連接的上下文中呢?可能是因?yàn)榱硪粋€(gè)連接導(dǎo)致的額外負(fù)載稍微改變了行為,但足夠顯著。不過(guò),這些不是從不同連接讀取的數(shù)據(jù),而是與問(wèn)題中的描述相反的當(dāng)前連接讀取的數(shù)據(jù)。這可以通過(guò)對(duì)不同的客戶端使用不同的消息來(lái)輕松檢查。


查看完整回答
反對(duì) 回復(fù) 2023-02-28
  • 1 回答
  • 0 關(guān)注
  • 89 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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