我正在编写一个简单的Arduino以太网程序。程序向服务器发送HTTP GET请求,然后服务器发送回声“#Hello Hello"我应该能够通过Arduino以太网接收它并将其打印在Arduino 1.0.4 IDE的串行监视器上。这是一些有用的信息。我在Windows Server 2003上使用XAMPP服务器。我将我的PHP文件放在/ xampp / htdocs / xampp中,文件名是rec.php。 rec.php的内容是
<?php
echo "Hello World";
?>
这是Arduino程序的文件内容
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0x7E, 0xAE}
IPAddress server { 192, 168, 1, 223 };
IPAddress ipAddress { xxx,xxx,xxx,xxx };
IPAddress myDNS {8,8,8,8};
IPAddress myGateway{192,168,1,1};
IPAddress mySubnet{255,255,255,0};
EthernetClient client;
void setup()
{
Serial.begin(9600);
Ethernet.begin(mac, ipAddress, myDNS, myGateway, mySubnet);
delay(1000);
Serial.println("connecting");
if(client.connect(server, 80))
{
Serial.println("Connected");
client.println("GET /rec.php HTTP/1.1");
}
else
Serial.println("Not Connected");
}
void loop()
{
if(client.available())
{
char c = client.read();
Serial.println(c);
delay(1000);
}
else
{
Serial.println("Not Available");
delay(1000);
}
}
在Arduino上加载程序后,我在Serial Monitor&#34; HTTP / 1.1 400 Bad Request&#34;上收到此消息。关于如何解决这个问题的任何建议?请保持简单的答案。
答案 0 :(得分:2)
您没有发送必要的行结束。该协议在请求方法结束时需要CR-LF,在完整请求结束时需要另一个CR-LF,可以包括其他标题行。参见:
这意味着在您的情况下,您需要两个CR-LF来终止请求。不要依赖默认的println函数。使用print:
控制代码中的行结束client.print("GET /rec.php HTTP/1.1\r\n\r\n");