可以尝试手动设置 Ethernet shield 的 DNS 服务器,以便正确的解析本地名称。
具体代码示例:
#include
#include
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(192,168,1,100); // 服务器 IP 地址
char servername[] = "example.com"; // 服务器的本地名称
byte dnsServer[] = { 8, 8, 8, 8 }; // Google 的 DNS 服务器
EthernetClient client;
DNSClient dns;
void setup() {
Ethernet.begin(mac);
dns.begin(dnsServer);
Serial.begin(9600);
}
void loop() {
if (client.connect(server,80)) {
Serial.println("Connected to server by IP");
client.println("GET / HTTP/1.0");
client.println();
client.stop();
} else {
Serial.println("Connecting to server by name");
dns.getHostByName(servername, server);
if (client.connect(server,80)) {
Serial.println("Connected to server by name");
client.println("GET / HTTP/1.0");
client.println();
client.stop();
} else {
Serial.println("Connection failed");
client.stop();
}
}
delay(5000);
}