当来自上一个连接的消息的部分转到下一个消息时,我不小心发现了一个错误。
我有一个带客户端的基本服务器。我已经删除了所有错误处理以避免示例过多膨胀。
我也用 替换了一些Printf,time.Sleep因为我没有机会及时断开连接来重现错误,因为它读取数据的速度太快了。
“包”是一个简单的结构,前 4 个字节是长度,然后是内容。
客户端代码:
package main
import (
"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]
. 当然,其余数据包含剩余的两个零:
浮云间
相关分类