2012-10-29 43 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 
}