首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ESP8266的FTP Arduino问题

ESP8266的FTP Arduino问题
EN

Stack Overflow用户
提问于 2017-01-21 03:32:42
回答 1查看 1.1K关注 0票数 1

尝试从ESP8266 WIFI板上使用我的路由器进行FTP,并使用Arduino-IDE,我一直收到以下错误消息:

代码语言:javascript
复制
331 Password required for anonymous.

我的代码如下所示:

代码语言:javascript
复制
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();

我的日志是这样的:

代码语言:javascript
复制
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.

正如您所看到的,我收到的错误消息(即err 331)已经在cmd nr 2(即“传递anonymous2)。

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

我读到了一些关于“被动模式”(client.println(F(“PASV”);)的东西,但在我看来,“匿名传递”应该独立于PASV模式。这是正确的吗?

这里有什么其他的建议吗?非常感谢!

附注:为了完成,FTP-receive (传递上述示例代码中的"outBuf“)如下所示:

代码语言:javascript
复制
//-------------- 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()
EN

回答 1

Stack Overflow用户

发布于 2017-01-21 20:26:41

使用FTP的匿名身份验证仍要求您发送用户名和密码。传统上,用户名是anonymous,电子邮件地址用作密码。像user@test.com这样的东西运行得很好。这里有一个RFC 959, File Transfer Protocol的链接。

从这里看,在您发送用户之前,您可能等待服务器发送220消息的时间不够长。连接后,请等待服务器完成其欢迎消息的发送。然后发送你的用户,等待331,然后发送你的通行证。服务器也可能为第一条消息发送多个字符串。尝试使用o/s的命令行客户端登录到FTP服务器,查看它发送给您的确切内容,并为此调整您的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41771067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档