Arduino以太网客户端读取数据两次

时间:2012-12-22 14:39:14

标签: http arduino ethernet

我一直在玩Arduino Uno并附带以太网屏蔽,试图阅读网页。到目前为止我的代码工作正常,但由于某种原因,它正在读取HTTP主体两次,我不知道为什么。任何帮助表示赞赏。

if(client.connect(host, 80)) {

Serial.println("connecting...");

client.println("GET /arduino.php HTTP/1.1");
client.println("Host: hostname.com");
client.println("User-Agent: arduino-ethernet");
client.println("Connection: close");
client.println();

Serial.println("begin reading...");

char c;
boolean parsingHeader = true;

while(client.connected()) {
  while(client.available()) {

    if (parsingHeader) {
      Serial.println("Parsing Header");

      client.find((char*)"HTTP/1.1 ");
      char statusCode[] = "000";
      client.readBytes(statusCode, 3);
      statusOk = (strcmp(statusCode, "200") == 0);
      debug2("Status Code: ", statusCode);

      client.find((char*)"Content-Length: ");
      while (isdigit(c = client.read())) {
        content_length = (content_length * 10) + (c - '0');
      }
      debug2("Content-Length: ", content_length);

      client.find((char*)"\n\r\n");
      parsingHeader = false;

    } else {
      c = client.read();
      // if(length < content_length) { // Manual skip
        Serial.print(c);
        length++;
      // }
    }

  }
}

Serial.println();
Serial.println(content_length);
Serial.println(length);

我已经提取了主要的代码块,它位于一个名为loop()的方法中,每10000毫秒调用一次。 content_length是正确的,但长度总是正好两倍。我错过了什么?删除任何while循环都不会导致输出。

0 个答案:

没有答案