Arduino Web客户端类无法正常工作

时间:2010-01-02 13:47:05

标签: c++ c arduino

我正在尝试使用Arduino客户端类从Internet获取HTML页面(例如来自Arduino库本身),但它无法正常工作(连接尚未建立)。

它失败了:

client.connect();

我尝试过以太网和Ethernet2库。

我的Arduino开发平台版本是0017,操作系统是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 个答案:

答案 0 :(得分: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()

确实失败了两次或三次但最终它在'for'循环的第3或第4次迭代中连接到谷歌网络服务器以及我的本地网络服务器。

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