2010-01-02 85 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服务器。

如果有人知道这种行为的原因,请回复。