The line: client.connect(ftpServer,21) works and the FTP server returns its welcome text but nothing else works.
I can connect with the same credentials using telnet (using Putty).
In my case the response from the FTP Server is as below and it testifies that the GPRS connection is active and working.
Code: Select all
Command connected ----------SEE ON CODE
Login process...
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 4 of 150 allowed.
220-Local time is now 13:29. Server port: 21.
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.
The ESP32 sketch is too big but the relevant segment is listed below:
Code: Select all
byte doFTP(){
const char* ftpServer = "ftp.myserver.com";
if (client.connect(ftpServer,21)) { -------------- - connection works OK.
Serial.println(F("Command connected")); <------Check printed CONNECTION above
} else {
Serial.println(F("Command connection failed"));
return 0;
}
Serial.println("Login process...");
// send login name and password
if(!eRcv()) return 0;
client.println(F("USER myUserName@ftp.myservercom"));
if(!eRcv()) return 0;
client.println(F("PASS myPass"));
if(!eRcv()) return 0;
client.println(F("SYST"));
if(!eRcv()) return 0;
client.println(F("Type I"));
if(!eRcv()) return 0;
client.println(F("PASV"));
if(!eRcv()) return 0;
char *tStr = strtok(outBuf,"(,");
int array_pasv[6];
for ( int i = 0; i < 6; i++) {
tStr = strtok(NULL,"(,");
array_pasv[i] = atoi(tStr);
if(tStr == NULL){
Serial.println(F("Bad PASV Answer"));
}
}
// TinyGSM Client for Internet connection
TinyGsmClient dclient(modem);
unsigned int hiPort,loPort;
hiPort = array_pasv[4] << 8;
loPort = array_pasv[5] & 255;
Serial.print(F("Data port: "));
hiPort = hiPort | loPort;
Serial.println(hiPort);
if (dclient.connect(ftpServer,hiPort)) {
Serial.println(F("Data connected"));
}else{
Serial.println(F("Data connection failed"));
client.stop();
return 0;
}
// setup to send file file fileName
client.print(F("STOR "));
client.println("myNewPic.jpg");
if(!eRcv()){
dclient.stop();
return 0;
}
// send file contents
//dclient.write(clientBuf,clientCount);
Serial.println(F("Starting FTP transfer..."));
dclient.write((uint8_t*)tempImageBuffer,ImgMetaData.imSize);
dclient.stop();
Serial.println(F("Data disconnected"));
if(!eRcv()) return 0;
client.println(F("QUIT"));
if(!eRcv()) return 0;
client.stop();
Serial.println(F("Command disconnected"));
return 1;
}
* uploaded files are immediately deleted by the system as it is for test only.
The same code on the post above was used (only credentials were changed) and my impression is that if failed at precisely the same place: USER anonymous
Using FileZilla I can transfer a file (that is immediately deleted) but the transfer runs OK.
The connection dialog registered at the serial console is as below:
Code: Select all
Command connected
Login process...
220 (vsFTPd 3.0.3)
221 Goodbye.
Command disconnected
FTP FAIL
Server disconnected
GPRS disconnected
Paulo