ESP8266的

时间:2017-01-20 19:32:42

标签: ftp arduino esp8266

尝试使用我的路由器从ESP8266 WiFi板和使用Arduino-IDE进行FTP,我不断收到以下错误消息:

331 Password required for anonymous.

我的代码如下所示:

if (client.connect(server, 21)) {  // 21 = FTP server
  Serial.println(F("Command connected FIRST TIME"));
} else {
  Serial.println(F("Command connection failed FIRST TIME"));
}
eRcv();
Serial.println("OUTPUT BUFFER 1");
Serial.println(outBuf);
client.println(F("USER anonymous"));
eRcv();
Serial.println("OUTPUT BUFFER 2");
Serial.println(outBuf);
client.println(F("PASS anonymous"));
eRcv();
Serial.println("OUTPUT BUFFER 3");
Serial.println(outBuf);
client.println(F("SYST"));
eRcv();
Serial.println("OUTPUT BUFFER 4");
Serial.println(outBuf);
client.println(F("Type I"));
eRcv();

我的日志看起来像这样:

WiFi connected; IP address: 192.168.178.33
Command connected FIRST TIME
OUTPUT BUFFER 1
220 FRITZ!Box7490 FTP server ready.

OUTPUT BUFFER 2
331 Password required for anonymous.

正如您所看到的,我收到的错误消息(即错误331)已经发生在cmd nr 2(即" PASS anonymous2)。

路由器设置为接受匿名FTP(应该不是问题)。当然,路由器设置为允许FTP。

我读了一些关于被动模式" (client.println(F(" PASV"));)但在我看来," PASS匿名"应该独立于PASV模式矿石而不是。这是对的吗?

有什么其他建议在这做什么? 非常感谢!

P.S。完成后,FTP-receive(从上面的示例代码中提供" outBuf")如下所示:

//-------------- FTP receive
byte eRcv() {
    byte respCode;
    byte thisByte;

    long StartTimeoutTime = millis();
    while (!client.available() && (millis() - StartTimeoutTime < 1000))
    { // wait for answer with 1 second timeout
      delay(1);
    }
    if (millis() - StartTimeoutTime >= 1000)
    {
      efail();
      return 0;
    }

    respCode = client.peek();

    outCount = 0;

    while (client.available()) {
      thisByte = client.read();
      //Serial.write(thisByte);

      if (outCount < 127) {
        outBuf[outCount] = thisByte;
        outCount++;
        outBuf[outCount] = 0;
      }
    }

    if (respCode >= '4') {
      efail();
      return 0;
    }
    return 1;
}  // eRcv()

1 个答案:

答案 0 :(得分:0)

使用FTP进行匿名身份验证仍需要您发送用户名和密码。传统上,用户名为anonymous,电子邮件地址用作密码。像user@test.com这样的工作正常。这是RFC 959, File Transfer Protocol的链接。

从此处看起来您可能没有等待足够长的时间让服务器在发送USER之前发送220消息。连接后,等待服务器完成发送欢迎消息。然后发送您的USER,等待331,然后发送您的PASS。服务器也可能正在为第一条消息发送多个字符串。尝试使用您的o / s的命令行客户端登录FTP服务器,并确切地查看它发送给您的内容,并调整您的代码。