1

我正在编写一个简单的 Arduino 以太网程序。该程序向服务器发送一个 HTTP GET 请求,然后服务器回显“Hello World”,我应该能够通过 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 上加载程序后,我在串行监视器上收到此消息“HTTP/1.1 400 Bad Request”。关于如何解决该问题的任何建议?请保持你的答案简单。

4

1 回答 1

2

您没有发送必要的线路末端。该协议要求在请求方法的末尾有一个 CR-LF,在完整请求的末尾有另一个 CR-LF,可以包含其他标题行。看:

HTTP 请求

这意味着在您的情况下,您需要两个 CR-LF 来终止请求。不要依赖默认的 println 函数。使用 print 控制代码中的行尾:

client.print("GET /rec.php HTTP/1.1\r\n\r\n");
于 2013-06-14T06:59:47.083 回答