问题描述
我试图在ESP8266芯片上运行HTTP和HTTPS服务器。我将两个服务器都包装到我的自定义类中,希望方法_serveStaticResource成为HTTP和HTTPS服务器的“未找到”处理程序。库类WiFiServerSecure扩展了WiFiServer:
class WiFiServerSecure : public WiFiServer {...}
这是我的代码:
void WebServer::begin() {
_httpServer = new ESP8266WebServer(80);
_httpServer->onNotFound([&]() -> void { _serveStaticResource((esp8266webserver::ESP8266WebServerTemplate<WiFiServer>*) _httpServer); });
_httpServer->begin();
_httpsServer = new ESP8266WebServerSecure(443);
_httpsServer->getServer().setServerKeyAndCert_P(rsakey,sizeof(rsakey),x509,sizeof(x509));
// !!!!!!! LINE BELOW !!!!!!!
_httpsServer->onNotFound([&]() -> void { _serveStaticResource((esp8266webserver::ESP8266WebServerTemplate<WiFiServerSecure>*) _httpsServer); });
_httpServer->begin();
}
void WebServer::_serveStaticResource(esp8266webserver::ESP8266WebServerTemplate<WiFiServer>* server) {
String fileName = PUBLIC_DIR + server->uri();
if(fileName.endsWith("/")) fileName += INDEX_FILENAME;
File file = SD.open(fileName.c_str());
if(file) {
if (file.isDirectory()) {
server->send(404,"text/plain","");
} else {
String mediaType;
if(fileName.endsWith(".html")) mediaType = "text/html";
else if(fileName.endsWith(".css")) mediaType = "text/css";
else if(fileName.endsWith(".js")) mediaType = "application/javascript";
else if(fileName.endsWith(".json")) mediaType = "application/json";
else mediaType = "text/plain";
server->streamFile(file,mediaType)
}
file.close();
}
}
在标有注释'// !!!!!!!的行上给出错误在下面!!!!!!!'。
sketch\WebServer.cpp: In lambda function:
WebServer.cpp:16:143: error: no matching function for call to 'WebServer::_serveStaticResource(esp8266webserver::ESP8266WebServerTemplate<BeaRSSL::WiFiServerSecure>*)'
_httpsServer->onNotFound([&]() -> void { _serveStaticResource((esp8266webserver::ESP8266WebServerTemplate<WiFiServerSecure>*) _httpsServer); });
^
sketch\WebServer.cpp:16:143: note: candidate is:
In file included from sketch\WebServer.cpp:1:0:
sketch\WebServer.h:124:10: note: void WebServer::_serveStaticResource(esp8266webserver::ESP8266WebServerTemplate<WiFiServer>*)
void _serveStaticResource(esp8266webserver::ESP8266WebServerTemplate<WiFiServer>* server);
^
当我按照以下方式更改标记的行时,它会编译,但是HTTPS服务器不会发送任何响应:
_httpsServer->onNotFound([&]() -> void { _serveStaticResource((esp8266webserver::ESP8266WebServerTemplate<WiFiServer>*) _httpsServer); });
CPP的新手,请告知。谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)