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
Question ESP32 Daten per Bluetooth auf AppInventor App anzeigen mamo1234 2 156 23.05.2019 14:10
Letzter Beitrag: mamo1234
  [gelöst] NTP Client Beispiele gehen 2 Sekunden nach Markus N. 10 554 05.05.2019 11:24
Letzter Beitrag: Markus N.
  Daten vom Sensor in einer Text-Datei auf meinem Web-Host speichern. Manny 45 2.921 27.04.2019 07:24
Letzter Beitrag: Fips
  ESP-01 - 433 Empfangen und senden Sub7evenHH 35 3.484 08.04.2019 12:14
Letzter Beitrag: Hilgi
  ESP8266 D1 Mini verliert die Daten nach Spannungsausfall. Manny 10 1.350 01.04.2019 16:00
Letzter Beitrag: amithlon
  Problem: Daten seriell von PC zu WeMos D1 Mini übertragen Jacksonwill 5 1.063 17.02.2019 11:56
Letzter Beitrag: Jacksonwill
  NodeMCU12E mit UDP Client & UDP Server & Webserver rkuehle 6 3.462 10.02.2019 20:52
Letzter Beitrag: Tommy56
  ESP8266 als SPIFFS/Webserver soll Daten verarbeiten TiRe 23 3.638 23.01.2019 08:03
Letzter Beitrag: Fips
  ESP als server zum daten empfangen Gandalf 29 4.540 19.01.2019 17:37
Letzter Beitrag: Gandalf
  Keine Cache-Nutzung 1.8.7 + 2.4.2 Tommy56 8 1.684 25.12.2018 23:56
Letzter Beitrag: Tommy56

Gehe zu:


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