Arduino:打开和关闭以太网服务器可用性

时间:2012-10-29 10:12:10

标签: webserver arduino

我需要设置一个必须打开和关闭的以太网(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,我怎么能避免建立连接?

2 个答案:

答案 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
}