INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
FTP client kann keine Daten empfangen
10.05.2019, 08:34
Beitrag #1
FTP client kann keine Daten empfangen
Hallo,
ich benutze folgenden FTP client, welcher ein wenig modifiziert wurde, damit er mit WiFi funktioniert. Das Programm kann leider nur Daten die auf der SD-Karte liegen auf einem externen FTP Server senden. Ich benötige das gegenteil, sodass ich eine Datei die auf dem externen Server liegt auf die SD-Karte laden kann. Sobald ich die Zeile
Code:
// comment out next line to write to SD from FTP server
// #define FTPWRITE
entferne sollte das Programm genau dies machen. Aber leider wird dann die Datei, die heruntergeladen werden soll ohne Inhalt und alles groß geschrieben auf der SD-Karte angezeigt.
Zu meinem Code
Code:
#include <SD.h>
#include <SPI.h>
#include <ESP8266WiFi.h>

// comment out next line to write to SD from FTP server
// #define FTPWRITE

#define STASSID "xxx"
#define STAPSK  "xxx"
const char* ssid     = STASSID;
const char* password = STAPSK;

// change to your server
IPAddress server( x, x, x, x );

WiFiClient client;
WiFiClient dclient;

char outBuf[128];
char outCount;

// change fileName to your file (8.3 format!)
char fileName[13] = "Meeting.txt";

void setup()
{
  Serial.begin(115200);

  if(SD.begin(4) == 0)
  {
    Serial.println(F("SD init fail"));          
  }

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  delay(2000);
  Serial.println(F("Ready. Press f or r"));
}

void loop()
{
  byte inChar;

  inChar = Serial.read();

  if(inChar == 'f')
  {
    if(doFTP()) Serial.println(F("FTP OK"));
    else Serial.println(F("FTP FAIL"));
  }

  if(inChar == 'r')
  {
    readSD();    
  }

}

File fh;

byte doFTP()
{
#ifdef FTPWRITE
  fh = SD.open(fileName,FILE_READ);
#else
  SD.remove(fileName);
  fh = SD.open(fileName,FILE_WRITE);
#endif

  if(!fh)
  {
    Serial.println(F("SD open fail"));
    return 0;    
  }

#ifndef FTPWRITE  
  if(!fh.seek(0))
  {
    Serial.println(F("Rewind fail"));
    fh.close();
    return 0;    
  }
#endif

  Serial.println(F("SD opened"));

  if (client.connect(server,21))
  {
    Serial.println(F("Command connected"));
  }
  else {
    fh.close();
    Serial.println(F("Command connection failed"));
    return 0;
  }

  if(!eRcv()) return 0;

  client.println(F("USER kalenderdisplay"));

  if(!eRcv()) return 0;

  client.println(F("PASS kalenderdisplay"));

  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"));
    }
  }

  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(server,hiPort))
  {
    Serial.println(F("Data connected"));
  }
  else
  {
    Serial.println(F("Data connection failed"));
    client.stop();
    fh.close();
    return 0;
  }

#ifdef FTPWRITE
  client.print(F("STOR "));
  client.println(fileName);
#else
  client.print(F("RETR "));
  client.println(fileName);
#endif

  if(!eRcv())
  {
    dclient.stop();
    return 0;
  }

#ifdef FTPWRITE
  Serial.println(F("Writing"));

  byte clientBuf[64];
  int clientCount = 0;

  while(fh.available())
  {
    clientBuf[clientCount] = fh.read();
    clientCount++;

    if(clientCount > 63)
    {
      dclient.write(clientBuf,64);
      clientCount = 0;
    }
  }

  if(clientCount > 0) dclient.write(clientBuf,clientCount);

#else
  while(dclient.connected())
  {
    while(dclient.available())
    {
      char c = dclient.read();
      fh.write(c);      
      Serial.write(c);
    }
  }
#endif

  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"));

  fh.close();
  Serial.println(F("SD closed"));
  return 1;
}

byte eRcv()
{
  byte respCode;
  byte thisByte;

  while(!client.available()) delay(1);

  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;
}


void efail()
{
  byte thisByte = 0;

  client.println(F("QUIT"));

  while(!client.available()) delay(1);

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

  client.stop();
  Serial.println(F("Command disconnected"));
  fh.close();
  Serial.println(F("SD closed"));
}

void readSD()
{
  fh = SD.open(fileName,FILE_READ);

  if(!fh)
  {
    Serial.println(F("SD open fail"));
    return;    
  }

  while(fh.available())
  {
    Serial.write(fh.read());
  }

  fh.close();
}
Im Serialen Monitor wird angezeigt, dass der FTP client eine Verbindung aufgebaut hat und die Datei(.txt) geöffnet bzw. heruntergeladen hat.

Hat jemand eine Idee wie ich das problem lösen könnte?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.05.2019, 08:47 (Dieser Beitrag wurde zuletzt bearbeitet: 10.05.2019 09:32 von Tommy56.)
Beitrag #2
RE: FTP client kann keine Daten empfangen
Irgendwie geht mir das bei Dir zu sehr durcheinander. Erst sprichst Du vom FTP-Server, dann von einem FTP-Client.

Beschreibe doch erst mal in klaren Worten (ohne Sketche) was Du vor hast.
So konfus ist Hilfe illusorisch.

Gruß Tommy

Edit: Hast Du getestet, ob Dein FTP-Server die Datei auch versendet? Also mit einem fertigen FTP-Client, z.B. Filezilla.

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.05.2019, 08:53
Beitrag #3
RE: FTP client kann keine Daten empfangen
(10.05.2019 08:34)I-Azubi schrieb:  #include <ESP8266WiFi.h>

Gestern kanntest du das Unterforum für den Esp.... noch!

@MOD
Bitte verschieben.

Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ESP8266 8 Kanal Relais keine Aktualisierung im WebIF magnum1795 5 119 Heute 10:51
Letzter Beitrag: Fips
  MQTT Client mit Client Zertifikaten und Benutzer/Passwort klappt nicht Mausbiber 10 615 11.08.2019 22:28
Letzter Beitrag: Mausbiber
  Wemos ESP8266 UDP-Empfang verschiedener Daten HarryB 1 247 09.08.2019 15:42
Letzter Beitrag: Tommy56
  Daten mehrerer ESP's mit Raspberry Pi 3+ anzeigen und schalten. Manny 13 938 29.07.2019 14:32
Letzter Beitrag: Tommy56
  ESP8266 D1 mini sendet keine Pushover-Nachrichten sima 27 2.352 14.07.2019 16:04
Letzter Beitrag: Tommy56
Question ESP32 Daten per Bluetooth auf AppInventor App anzeigen mamo1234 2 873 23.05.2019 14:10
Letzter Beitrag: mamo1234
  [gelöst] NTP Client Beispiele gehen 2 Sekunden nach Markus N. 10 1.459 05.05.2019 11:24
Letzter Beitrag: Markus N.
  Daten vom Sensor in einer Text-Datei auf meinem Web-Host speichern. Manny 45 5.191 27.04.2019 07:24
Letzter Beitrag: Fips
  ESP-01 - 433 Empfangen und senden Sub7evenHH 35 4.706 08.04.2019 12:14
Letzter Beitrag: Hilgi
  ESP8266 D1 Mini verliert die Daten nach Spannungsausfall. Manny 10 1.782 01.04.2019 16:00
Letzter Beitrag: amithlon

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste