乐鑫技术交流
直播中

生龙活虎3

8年用户 778经验值
擅长:光电显示
私信 关注
[问答]

coap总是从任何地方接收数据包,为什么会这样?

我实现了一个 coap 服务器:
代码:全选#include
coapServer coap;
void getListOfWiFi(coapPacket *packet, IPAddress ip, int port, int obs) //id = 0 GET
{
  Serial.println("hello");
    int numberOfNetworks = WiFi.scanNetworks();

    String WifiList = "";
    for (int i = 0; i < numberOfNetworks - 1; i++)
    {
        WifiList += WiFi.SSID(i) + "####";
    }
    WifiList += WiFi.SSID(numberOfNetworks - 1);
    char *temp = new char[WifiList.length() + 1];
    WifiList.toCharArray(temp, WifiList.length() + 1);
   
    coap.sendResponse(ip, port, temp);
    Serial.println("goodbye");
}
void setup()
{
       coap.server(getListOfWiFi, "wifilist");
       coap.start(5683);
}
void loop()
{
     coap.loop();
}


当启动 esp 时,串口监视器的输出是:
代码:全选hello
goodbye
hello
goodbye
hello
goodbye
hello
goodbye
hello
goodbye
hello
goodbye


并且它在没有任何接收数据包或请求的情况下一直打印它......
为什么会这样?
谢谢。

               


                        

回帖(1)

淡淡的爱

2023-9-19 14:23:26
SSID(i) + ",";    }    WifiList += WiFi.SSID(numberOfNetworks - 1);    coap.sendResponse(ip, port, packet->messageid, WifiList.c_str(), WifiList.length(), COAP_CONTENT, COAP_GET);}  void setup() {    Serial.begin(115200);    WiFi.begin("mySSID", "myPassword");    while (WiFi.status() != WL_CONNECTED) {      delay(1000);      Serial.println("Connecting to WiFi...");    }    coap.createServer();    coap.onRequestReceived(getListOfWiFi);}  void loop() {    coap.loop();} 

COAP是一种无连接协议,因此它总是从任何地方接收数据包,而不管数据包来自何处。当COAP服务器处于运行状态时,它会维护一个监听端口,并等待从客户端发送的请求。无论客户端在本地还是远程位置,只要它们知道服务器的IP地址和端口号,它们就可以向服务器发送数据包,服务器会从任何地方接收它们。在上述的COAP服务器代码中,列表函数getListOfWiFi()是在COAP服务器上注册的回调函数。当服务器从客户端接收到一个GET请求时,它将执行getListOfWiFi()函数,扫描可用的WIFI网络列表并将其发送回到客户端。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分