我试图在GoLang中为CoAP服务编写客户端和服务器。我使用了https://github.com/dustin/go-coap for this.
我成功地能够调用POST端点,但是无法调用PUT。 以下是我的问题
我尝试过的代码: 客户代码:
req := coap.Message{
Type: coap.Confirmable,
Code: coap.POST,
MessageID: 12345,
Payload: []byte(`Hello CoAP Server `),
}
path := "/App"
if len(os.Args) > 1 {
path = os.Args[1]
}
req.SetOption(coap.ETag, "weetag")
req.SetPathString(path)
c, err := coap.Dial("udp", "localhost:5683")
rv, err := c.Send(req)
客户代码:
req := coap.Message{
Type: coap.Confirmable,
Code: coap.PUT,
MessageID: 12345,
Payload: []byte(`Hello CoAP Server `),
}
path := "/App/fb" //here fb is app id and this can be anything
if len(os.Args) > 1 {
path = os.Args[1]
}
req.SetOption(coap.ETag, "weetag")
req.SetPathString(path)
c, err := coap.Dial("udp", "localhost:5683")
rv, err := c.Send(req)
用于POST和PUT请求的服务器代码:
mux := coap.NewServeMux()
// TODO-later: use UDP/coap
mux.Handle("/App", coap.FuncHandler(Register))
mux.Handle("/App/{AppID}", coap.FuncHandler(UpdateApp))
err := coap.ListenAndServe("udp", ":5683", mux)
这是用于通过PUT请求更新应用程序的服务器代码。在这里,我不知道如何在CoAP中将端点指定为PUT。有人可以建议我如何创建该端点mux.Handle("/App/{AppID}", coap.FuncHandler(UpdateApp))
作为PUT吗?
或者甚至让我知道对于CoAP Go Services是否有更好的Go库?
答案 0 :(得分:2)
根据此示例:
https://github.com/dustin/go-coap/blob/master/example/server/coap_server.go
看起来像go-coap处理程序仅受URI约束。 我认为您必须自己处理不同类型的请求。
必须生成带有无法识别或不受支持的方法代码的请求 一个4.05(不允许方法)附带的响应。
发件人:CoAP RFC 7252 Section 5.8 Method definitions
不幸的是,我没有学习围棋,也从未使用围棋,因此无法显示摘录。尽管我认为这很容易:您只需要使用相同的MID和令牌以NON-4.05进行回复即可。