2012-10-29 40 views
2

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

我在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())。我唯一想到的就是在else块的开头执行

server.available().stop(); 

。这样可以防止为条件为false时发出的请求提供服务,但不会阻止客户端和服务器之间的连接发生(就像打开连接并立即关闭连接一样)。

如何避免在条件为false时建立连接?

+0

使用看门狗自复位? – 2012-10-29 10:15:06

回答

0

我猜在这里,因为我没有我的Arduino的收藏很方便,但是从内存和读取基准你可以尝试像

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

希望可以至少帮助您在正确的方向。

欢呼声,

+0

谢谢,但我已经在我的问题的最后一段考虑了这种设计。我想拒绝不接受它们,而是给零字节响应。 – etuardu

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 
}