我需要设置一个必须打开和关闭的以太网(web)服务器,具体取决于Arduino UNO上的某些条件。
我在Ethernet
library中阅读了Server
类的文档,一旦开始,似乎没有机会停止服务器,即没有EthernetServer.begin()
对应的。
我当时想在setup
部分设置服务器并根据给定条件提供传入连接:
EthernetServer server = EthernetServer(80);
void setup() {
Ethernet.begin(mac, ip);
server.begin();
}
void loop() {
if (condition) {
EthernetClient client = server.available();
if (client == true) {
// serve the client...
}
} else {
// do something else
}
}
这确实有效,但客户端没有被正确拒绝:它只是待定。在浏览器中,可以看到网页加载有意义,如果条件变为true
,则最终将为条件为false
时发出的请求提供客户端。
我看不到拒绝请求的方法(没有EthernetServer.available()
的对应方)。我唯一想到的就是执行
server.available().stop();
在else块的开头。这可以防止在条件为false
时发出请求,但不会阻止客户端和服务器之间的连接发生(就像打开连接并立即关闭它一样)。
如果条件为false
,我怎么能避免建立连接?
答案 0 :(得分:0)
我猜这里因为我没有方便的Arduino系列,但是从内存和阅读参考文献中你可以尝试类似的东西
void loop()
{
EthernetClient client = server.available();
if ( !condition )
{
client.stop(); // break connection and do something else
}
else
{
// serve the client...
}
}
希望这至少可以帮助你朝着正确的方向前进。
干杯,
答案 1 :(得分:0)
当您想要禁用服务器时,您能否只返回404标题?
if(!condition)
{
client.println("HTTP/1.1 404 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html><body>404</body></html>");
}
else
{
// serve client
}