2

我需要设置一个必须根据 Arduino UNO 上的某些条件打开和关闭的以太网(Web)服务器。

我在库中阅读了Server该类的文档,似乎一旦启动就没有机会停止服务器,即没有对应的。EthernetEthernetServer.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

4

2 回答 2

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
}
于 2012-10-29T19:44:22.230 回答
0

我猜这里是因为我手边没有我的 Arduino 收藏,但是从记忆和阅读参考资料中,你可以尝试类似的东西

void loop() 
{
    EthernetClient client = server.available();
    if ( !condition )
    {
        client.stop(); // break connection and do something else
    }
    else
    {
        // serve the client...
    }
}

希望这至少可以帮助您朝着正确的方向前进。

干杯,

于 2012-10-29T11:37:04.507 回答