尝试使用我的路由器从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()
答案 0 :(得分:0)
使用FTP进行匿名身份验证仍需要您发送用户名和密码。传统上,用户名为anonymous
,电子邮件地址用作密码。像user@test.com
这样的工作正常。这是RFC 959, File Transfer Protocol的链接。
从此处看起来您可能没有等待足够长的时间让服务器在发送USER之前发送220消息。连接后,等待服务器完成发送欢迎消息。然后发送您的USER,等待331,然后发送您的PASS。服务器也可能正在为第一条消息发送多个字符串。尝试使用您的o / s的命令行客户端登录FTP服务器,并确切地查看它发送给您的内容,并调整您的代码。