CoAP(IPv6)开发问题小记

CoAP(IPv6 ) 开发问题小记

如果使用分块传输进行传输数据,需要添加 Value 可以选 0 ~ 6(分别表示数据size 16bit ~ 1024bit),

func (c *SimpleUDPCoAPClient) GetBlock2(path string) (string, error) {
	co, err := udp.Dial(c.host + ":" + strconv.Itoa(c.port))
	if err != nil {
		log.Println(err)
	}
	ctx, cancel := context.WithTimeout(context.Background(), 100*time.Second)
	defer cancel()
	resp, err := co.Get(ctx, path, message.Option{ID: message.Block2, Value: []byte{0x06}})
	if err != nil {
		return "", err
	}
	body, err := resp.ReadBody()
	if err != nil {
		return "", err
	}
	return string(body), nil
}

block option 解析

Value = []byte{0x00,0x00,0x00}

Value[0] = 0 0 0 0 0 0 0 0
Value[1] = 0 0 0 0 0 0 0 0
Value[2] = 0 0 0 0 0 0 0 0

Value[2] 的后3bit为数据的size 取值 0 - 6
Value[2] 的从右到左第四位含义为是否有下一包 取值 0 - 1
其他的 20bit为数据包的num 取值 0 - 0x0FFFFF

posted @ 2022-03-11 15:59  Jay·Chan  阅读(72)  评论(0编辑  收藏  举报