【问题标题】:Arduino: turn on and off ethernet server availabilityArduino:打开和关闭以太网服务器的可用性
【发布时间】:2012-10-30 03:44:22
【问题描述】:

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

我在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 时,我怎样才能避免建立连接?

【问题讨论】:

  • 使用看门狗自复位?

标签: webserver arduino


【解决方案1】:

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

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

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

干杯,

【讨论】:

  • 谢谢,但我已经在问题的最后一段中考虑了这种设计。我想拒绝 incomnig 连接而不是接受它们并给出零字节响应。
【解决方案2】:

当您希望禁用服务器时,您能否只返回一个 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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2019-03-30
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多