當來自上一個連接的消息的部分轉到下一個消息時,我不小心發現了一個錯誤。我有一個帶客戶端的基本服務器。我已經刪除了所有錯誤處理以避免示例過多膨脹。我也用 替換了一些Printf,time.Sleep因為我沒有機會及時斷開連接來重現錯誤,因為它讀取數據的速度太快了?!鞍笔且粋€簡單的結構,前 4 個字節是長度,然后是內容。客戶端代碼: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 個字節和長度的前 2 個字節,從而產生[107, 100, 26, 0]字節切片,而它應該是[26, 0, 0, 0]. 當然,其余數據包含剩余的兩個零:
TCP 套接字:消息接收來自先前連接的消息的一部分
慕尼黑8549860
2023-02-28 21:20:37