Features supported:
- CoAP over UDP RFC 7252.
- CoAP over TCP/TLS RFC 8232
- Observe resources in CoAP RFC 7641
- Block-wise transfers in CoAP RFC 7959
- request multiplexer
- multicast
- CoAP NoResponse option in CoAP RFC 7967
- CoAP over DTLS pion/dtls
// Server
// See /examples/simple/server/main.go
func handleA(w coap.ResponseWriter, req *coap.Request) {
log.Printf("Got message in handleA: path=%q: %#v from %v", req.Msg.Path(), req.Msg, req.Client.RemoteAddr())
w.SetContentFormat(coap.TextPlain)
log.Printf("Transmitting from A")
ctx, cancel := context.WithTimeout(req.Ctx, time.Second)
defer cancel()
if _, err := w.WriteWithContext(ctx, []byte("hello world")); err != nil {
log.Printf("Cannot send response: %v", err)
}
}
func main() {
mux := coap.NewServeMux()
mux.Handle("/a", coap.HandlerFunc(handleA))
log.Fatal(coap.ListenAndServe("udp", ":5688", mux))
// for tcp
// log.Fatal(coap.ListenAndServe("tcp", ":5688", mux))
// for tcp-tls
// log.Fatal(coap.ListenAndServeTLS("tcp-tls", ":5688", &tls.Config{...}, mux))
// for udp-dtls
// log.Fatal(coap.ListenAndServeDTLS("udp-dtls", ":5688", &dtls.Config{...}, mux))
}
// Client
// See /examples/simpler/client/main.go
func main() {
co, err := coap.Dial("udp", "localhost:5688")
// for tcp
// co, err := coap.Dial("tcp", "localhost:5688")
// for tcp-tls
// co, err := coap.DialTLS("tcp-tls", localhost:5688", &tls.Config{...})
// for udp-dtls
// co, err := coap.DialDTLS("udp-dtls", "localhost:5688", &dtls.Config{...}, mux))
if err != nil {
log.Fatalf("Error dialing: %v", err)
}
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
resp, err := co.GetWithContext(ctx, path)
if err != nil {
log.Fatalf("Error sending request: %v", err)
}
log.Printf("Response payload: %v", resp.Payload())
}
Look to examples/observe/server/main.go
Look to examples/observe/client/main.go
Look to examples/mcast/server/main.go
Look to examples/mcast/client/main.go
Apache 2.0