main.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package main
  2. import (
  3. "encoding/hex"
  4. "fmt"
  5. "net"
  6. "os"
  7. "sparrow/pkg/coap"
  8. "sparrow/pkg/protocol"
  9. "sparrow/pkg/tlv"
  10. "time"
  11. )
  12. const url = "127.0.0.1:56883"
  13. func main() {
  14. addr, err := net.ResolveUDPAddr("udp", url)
  15. if err != nil {
  16. fmt.Println("Can't resolve address: ", err)
  17. os.Exit(1)
  18. }
  19. conn, err := net.DialUDP("udp", nil, addr)
  20. if err != nil {
  21. fmt.Println("Can't dial: ", err)
  22. os.Exit(1)
  23. }
  24. defer conn.Close()
  25. token, _ := hex.DecodeString("e30680acf77ecd60")
  26. payloadHead := protocol.DataHead{
  27. Flag: 0,
  28. Timestamp: uint64(time.Now().Unix() * 1000),
  29. }
  30. param1 := []interface{}{uint32(3), float32(1.2), int64(10)}
  31. params1, err := tlv.MakeTLVs(param1)
  32. if err != nil {
  33. fmt.Println(err)
  34. }
  35. sub1 := protocol.SubData{
  36. Head: protocol.SubDataHead{
  37. SubDeviceid: uint16(1),
  38. PropertyNum: uint16(1),
  39. ParamsCount: uint16(len(params1)),
  40. },
  41. Params: params1,
  42. }
  43. param2 := []interface{}{uint32(4), int64(11)}
  44. params2, err := tlv.MakeTLVs(param2)
  45. if err != nil {
  46. fmt.Println(err)
  47. }
  48. sub2 := protocol.SubData{
  49. Head: protocol.SubDataHead{
  50. SubDeviceid: uint16(1),
  51. PropertyNum: uint16(2),
  52. ParamsCount: uint16(len(params2)),
  53. },
  54. Params: params2,
  55. }
  56. payload := &protocol.Data{
  57. Head: payloadHead,
  58. SubData: []protocol.SubData{},
  59. }
  60. payload.SubData = append(payload.SubData, sub1)
  61. payload.SubData = append(payload.SubData, sub2)
  62. buf, err := payload.Marshal()
  63. if err != nil {
  64. if err != nil {
  65. fmt.Println(err)
  66. }
  67. }
  68. req := &coap.BaseMessage{
  69. Code: coap.POST,
  70. Type: coap.CON,
  71. MessageID: 2,
  72. //Token: []byte{0, 1, 0x2, 3, 4, 5, 6, 7, 8, 9, 1, 12, 12, 1, 2, 1, 2, 2},
  73. Token: token,
  74. Payload: buf,
  75. }
  76. req.SetPathString("/2")
  77. bytes, err := req.Encode()
  78. if err != nil {
  79. fmt.Printf("dial err %s", err.Error())
  80. }
  81. conn.Write(bytes)
  82. msg := make([]byte, 20)
  83. _, err = conn.Read(msg)
  84. if err != nil {
  85. fmt.Println(err)
  86. }
  87. fmt.Printf("Response:%#v", msg)
  88. }