尝试从ESP8266 WIFI板上使用我的路由器进行FTP,并使用Arduino-IDE,我一直收到以下错误消息:
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.正如您所看到的,我收到的错误消息(即err 331)已经在cmd nr 2(即“传递anonymous2)。
路由器设置为接受匿名FTP (这应该不是问题)。当然,路由器被设置为允许FTP。
我读到了一些关于“被动模式”(client.println(F(“PASV”);)的东西,但在我看来,“匿名传递”应该独立于PASV模式。这是正确的吗?
这里有什么其他的建议吗?非常感谢!
附注:为了完成,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()发布于 2017-01-21 20:26:41
使用FTP的匿名身份验证仍要求您发送用户名和密码。传统上,用户名是anonymous,电子邮件地址用作密码。像user@test.com这样的东西运行得很好。这里有一个RFC 959, File Transfer Protocol的链接。
从这里看,在您发送用户之前,您可能等待服务器发送220消息的时间不够长。连接后,请等待服务器完成其欢迎消息的发送。然后发送你的用户,等待331,然后发送你的通行证。服务器也可能为第一条消息发送多个字符串。尝试使用o/s的命令行客户端登录到FTP服务器,查看它发送给您的确切内容,并为此调整您的代码。
https://stackoverflow.com/questions/41771067
复制相似问题