2010-01-02 81 views
2

我想使用Arduino客戶端類從Internet獲取HTML頁面(例如從Arduino庫本身),但它不工作(連接沒有建立)。Arduino網絡客戶端類不工作

它的失敗在:

client.connect(); 

我已經試過了以太網和ethernet2庫。

我的Arduino開發平臺版本是0017,OS是Windows XP。

以下是我的代碼和配置直列:

#include <Client.h> 
#include <Ethernet2.h> 
// #include <Ethernet.h> 
#include <Print.h> 
#include <Server.h> 

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
byte ip[] = { 192,168,1,7 }; 
byte server[] = { 74,125,47,103 }; // Google home page 
byte gateway[] = { 192,168,1,1 }; 
byte mask[] = { 255,255,255,0 }; 

Client client(server, 80); 

void setup() 
{ 
    Ethernet.begin(mac, ip, gateway, mask); 
    Serial.begin(9600); 

    delay(1000); 

    Serial.println("connecting..."); 

    if (client.connect()) { 
    Serial.println("connected"); 
    client.println("GET /search?q=arduino HTTP/1.0"); 
    client.println(); 
    } else { 
    Serial.println("connection failed"); 
    } 
} 

void loop() 
{ 
    if (client.available()) { 
    char c = client.read(); 
    Serial.print(c); 
    } 

    if (!client.connected()) { 
    Serial.println(); 
    Serial.println("disconnecting."); 
    client.stop(); 
    for(;;); 
    } 
} 
+1

你有一個以太網盾嗎? – maxedmelon 2010-01-02 18:05:10

+0

您是否嘗試連接到本地Web服務器? – 2010-01-02 18:07:47

+0

是的,我有一個以太網盾,是的,我試圖連接到本地的網絡服務器,它也失敗了。 – 2010-01-03 09:47:56

回答

5

我不知道原因,但我不得不修改以下setup()函數來獲取代碼工作:

void setup() { 
    Ethernet.begin(mac, ip, gateway, mask); 
    Serial.begin(9600); 

    delay(1000); 

    Serial.println("connecting..."); 

    for(int i = 0;i <100 ; i++) { 
    if (client.connect()) { 
     Serial.println("connected");   
     client.println("GET /search?q=arduino HTTP/1.0"); 
     client.println(); 
     break; 
    } else { 
     Serial.println("connection failed"); 
    } 
    } 
} 

代碼:

client.connect() 

確實失敗兩次或三次,但最終它連接到谷歌網站rver以及在'for'循環的第3或第4次迭代中我的本地Web服務器。

如果有人知道這種行爲的原因,請回復。