这个问题我已经找了好几天了,但还是没有找到答案。
我正在尝试根据Arduino IDE提供的示例代码与arduino扩展板建立一个简单的Web客户端连接。这是我尝试执行的简化版本:
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte server[] = { 173 ,194, 46, 34 }; // Google
EthernetClient client;
void setup()
{
Ethernet.begin(mac);
Serial.begin(9600);
delay(1000);
Serial.println(Ethernet.localIP());
Serial.println("connecting...");
if (client.connect(server, 80)) {
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(;;)
;
}
}
并始终得到答案:
192.168.0.103
connecting...
connection failed
disconnecting.
这意味着 client.connect(server, 80) 失败。我尝试了几个IP地址,结果都一样。该防护罩工作正常,因为我已经尝试了 WebServer 示例,并且似乎工作完美。
硬件上的PS:我使用的是Arduino UNO R3和基于W5100的以太网盾
有什么建议吗?
最佳答案
我看了一下source code以太网库的,假设您有该库的最新版本。在我看来,Arduino EthernetClient
connect()
函数需要一个 IPAddress
对象或一个字符串 (char *
) 与远程主机的名称。您正在向它传递一个字节数组,我的猜测是它可能将其解释为字符串。
尝试按如下方式声明 server
全局变量:
IPAddress server(173 ,194, 46, 34);
如果有效,则表明official documentation ,您可能从中获取了代码,已经过时了。
此外,您可以尝试将所有其他参数作为 IPAddress
对象提供给 begin()
函数,这样就不会使用 DHCP,并且可以排除以下问题自动配置。原型(prototype)为:
void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server, IPAddress gateway, IPAddress subnet);
关于Arduino 以太网屏蔽 client.connect() 总是返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21387597/