2

我正在尝试使用 Arduino 客户端类从 Internet 获取 HTML 页面(来自 Arduino 库本身的示例),但它不起作用(连接未建立)。

它在以下方面失败:

client.connect();

我已经尝试过 Ethernet 和 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(;;);
  }
}
4

1 回答 1

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”循环的第三或第四次迭代中连接到谷歌网络服务器以及我的本地网络服务器。

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

于 2010-01-03T12:56:09.560 回答