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.

Thema geschlossen 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Welcher FTP Client um mehrere Dateien auf den Server zu schieben.
05.08.2017, 12:25
Beitrag #1
Brick Welcher FTP Client um mehrere Dateien auf den Server zu schieben.
Welcher FTP Client um mehrere Dateien auf den Server zu schieben.
Arduino M0, Ethernet2 Shield

Mit dem geht es nichtWink: http://playground.arduino.cc/Code/FTP
#include <Wire.h>
#include <SPI.h>
#include <Ethernet2.h>
#include <stdlib.h>
//SD
#include <SD.h>
05.08.2017, 12:32
Beitrag #2
RE: Welcher FTP Client um mehrere Dateien auf den Server zu schieben.
Doch, warum sollte das nicht gehen.

Du musst in einer Schleife die Filenamen von der SD lesen. Da gab es nebenan gerade einen Thread dazu.
Dann kannst Du das jeweilige File hoch laden.

Wenn Du Deinen Sketch hier einstellst, dann verwende bitte Codetags. Wie das geht, steht hier.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
05.08.2017, 12:52
Beitrag #3
RE: Welcher FTP Client um mehrere Dateien auf den Server zu schieben.
Bei mir läuft das verlinkte FTP Beispielprogramm vom Playground in etwas abgewandelter Form auf einem Arduino MEGA mit Ethernet. Meine Daten kommen nicht von einer SD-Karte sondern aus dem RAM des Arduinos, aber das sollte unerheblich sein.

Die Gegenseite ist ein Windows PC auf dem "FileZilla Server" installiert ist.
Es gibt einige Fallstricke bei den Einstellungen die es zu umschiffen gilt. (Benutzername, Passwort, ect.)

Was läuft bei dir auf der Gegenseite?

Gruß
Arne

Gruß Arne
Mit zunehmender Anzahl qualifizierter Informationen bei einer Fragestellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.
Alle Beiträge dieses Benutzers finden
05.08.2017, 18:30
Beitrag #4
RE: Welcher FTP Client um mehrere Dateien auf den Server zu schieben.
(05.08.2017 12:52)ardu_arne schrieb:  Bei mir läuft das verlinkte FTP Beispielprogramm vom Playground in etwas abgewandelter Form auf einem Arduino MEGA mit Ethernet. Meine Daten kommen nicht von einer SD-Karte sondern aus dem RAM des Arduinos, aber das sollte unerheblich sein.

Die Gegenseite ist ein Windows PC auf dem "FileZilla Server" installiert ist.
Es gibt einige Fallstricke bei den Einstellungen die es zu umschiffen gilt. (Benutzername, Passwort, ect.)

Was läuft bei dir auf der Gegenseite?

Gruß
Arne

Ich habe auf meinem Ubuntuserver 16.04.2 LTS PROFTPD laufen.

(05.08.2017 12:32)Tommy56 schrieb:  Doch, warum sollte das nicht gehen.

Du musst in einer Schleife die Filenamen von der SD lesen. Da gab es nebenan gerade einen Thread dazu.
Dann kannst Du das jeweilige File hoch laden.

Wenn Du Deinen Sketch hier einstellst, dann verwende bitte Codetags. Wie das geht, steht hier.

Gruß Tommy

Das Sketch fast gleich dem, wie bei dem Link. Ist erst einmal ein Testsketch, was später in den eigentlichen Sketch eingefügt werden.

Code:
fileName[13] ="test.txt";
  doFTP()

  fileName[13] ="test1.txt";
  doFTP()

Code:
    /*
   FTP passive client for IDE v1.0.1 and w5100/w5200
   Posted October 2012 by SurferTim
   Modified 6 June 2015 by SurferTim
*/

#include <Wire.h>
#include <SPI.h>
#include <Ethernet2.h>
#include <stdlib.h>
//SD
#include <SD.h>
// comment out next line to write to SD from FTP server
#define FTPWRITE

// this must be unique
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x59, 0x67 };  

// change to your network settings
IPAddress ip( 192, 168, 2, 2 );    
IPAddress gateway( 192, 168, 2, 1 );
IPAddress subnet( 255, 255, 255, 0 );

// change to your server
IPAddress server( 1, 2, 3, 4 );

EthernetClient client;
EthernetClient dclient;

char outBuf[128];
char outCount;

// change fileName to your file (8.3 format!)
char fileName[13];

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

  digitalWrite(10,HIGH);

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

  Ethernet.begin(mac, ip, gateway, gateway, subnet);
  digitalWrite(10,HIGH);
  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();    
  }*/
  fileName[13] ="test.txt";
  doFTP()

  fileName[13] ="test1.txt";
  doFTP()
delay(10000))  
}

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

  if(!eRcv()) return 0;

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

  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();
}
05.08.2017, 19:17
Beitrag #5
RE: Welcher FTP Client um mehrere Dateien auf den Server zu schieben.
Wenn Du das FTP nur zum Hochschieben nutzen willst, dann wirf alles andere raus.

Den Filenamen würde ich direkt an doFtp übergeben:

Code:
byte doFtp(char *fName) {
  fh = SD.open(fName,FILE_READ);
  ...
}

// oder für beides
byte doFtp(char *fName, boolean upLoad) {
  if (upload) {
    fh = SD.open(fName,FILE_READ);
  }
  else {
    SD.remove(fileName);
    fh = SD.open(fileName,FILE_WRITE);
  }
  ...

Das mal als Anregung.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
05.08.2017, 19:50
Beitrag #6
RE: Welcher FTP Client um mehrere Dateien auf den Server zu schieben.
(05.08.2017 12:25)derAllgaeuer schrieb:  ...
Mit dem geht es nichtWink: http://playground.arduino.cc/Code/FTP
...

Das ist erst mal eine wenig hilfreiche Aussage zur Fehlersuche.
Ein paar mehr Infos wären nützlich.
Was sagt denn z.B. der serielle Monitor.

FileZilla hat eine gute GUI die alle Verbindungen und Verbindungsversuche darstellt und auch zeigt warum eine Verbindung nicht aufgebaut wurde.
Gibt es bei PROFTPD etwas vergleichbares und wenn ja, was wird angezeigt?

Gruß
Arne

Gruß Arne
Mit zunehmender Anzahl qualifizierter Informationen bei einer Fragestellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.
Alle Beiträge dieses Benutzers finden
05.08.2017, 20:49
Beitrag #7
RE: Welcher FTP Client um mehrere Dateien auf den Server zu schieben.
(05.08.2017 19:50)ardu_arne schrieb:  Das ist erst mal eine wenig hilfreiche Aussage zur Fehlersuche.
Ein paar mehr Infos wären nützlich.
Was sagt denn z.B. der serielle Monitor.

FileZilla hat eine gute GUI die alle Verbindungen und Verbindungsversuche darstellt und auch zeigt warum eine Verbindung nicht aufgebaut wurde.
Gibt es bei PROFTPD etwas vergleichbares und wenn ja, was wird angezeigt?

Gruß
Arne

1.)Wusste nicht das es wichtig ist.
2.)Ich habe einen Server ohne GUI und ich werde keinen anderen FTP Server installieren. Sorry.
3.)Es werden alle beide als erfolgreich übertragen angezeigt, aber nur eines übertragen.
4.)Morgen werde ich erst einmal das probieren.
(05.08.2017 19:17)Tommy56 schrieb:  Wenn Du das FTP nur zum Hochschieben nutzen willst, dann wirf alles andere raus.

Den Filenamen würde ich direkt an doFtp übergeben:

Code:
byte doFtp(char *fName) {
  fh = SD.open(fName,FILE_READ);
  ...
}

// oder für beides
byte doFtp(char *fName, boolean upLoad) {
  if (upload) {
    fh = SD.open(fName,FILE_READ);
  }
  else {
    SD.remove(fileName);
    fh = SD.open(fileName,FILE_WRITE);
  }
  ...

Das mal als Anregung.

Gruß Tommy

Einen schönen Abend und einen schönen Sonntag.

Gruß
05.08.2017, 21:00 (Dieser Beitrag wurde zuletzt bearbeitet: 05.08.2017 21:01 von Tommy56.)
Beitrag #8
RE: Welcher FTP Client um mehrere Dateien auf den Server zu schieben.
Der PROFTPD hat auch ein Logging. Schau mal in der Doku. Das ist in solchen Fällen ganz hilfreich.

Bitte wiederhole nicht immer alle vorherigen Postinginhalte, Das macht die Threads unübersichtlich. Ein paar mehr Worte in Deinen Antworten, vor allem, worauf sie sich beziehen, wären sinnvoll, um einen Sinn in Deinen Antworten zu finden..

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Thema geschlossen 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Wire.write und Client Socket LiVe 3 126 11.01.2019 13:51
Letzter Beitrag: Tommy56
  mehrere Bytes seriell einlesen. Verständnisprobleme Mosi 9 462 19.12.2018 16:07
Letzter Beitrag: Mosi
  mehrere leds blinken jennerlein 1 231 18.12.2018 09:25
Letzter Beitrag: hotsystems
  Mehrere Werte "ungefähr" vergleichen DL1AKP 8 892 06.09.2018 14:48
Letzter Beitrag: ardu_arne
  Daten zum Server schicken (SSL?) Gandalf 1 576 03.09.2018 18:13
Letzter Beitrag: Tommy56
  Scetch in mehrere Scripte aufteilen? Lanzet3 7 667 13.08.2018 20:55
Letzter Beitrag: ardu_arne
  Zeit-Server-Problem 182 19 2.488 07.06.2018 21:42
Letzter Beitrag: ardu_arne
  HTTP-Server lesen / SIM800l AT+HTTPREAD uk1408 1 614 22.02.2018 19:25
Letzter Beitrag: georg01
  Mehrere Ausgänge mit einem Befehl auf High oder Low setzen dahans 1 1.753 10.01.2018 12:48
Letzter Beitrag: Tommy56
  Ampelschaltung mehrere Befehle möglichst gleichzeitig Jan5663 15 1.657 15.12.2017 15:46
Letzter Beitrag: Chopp

Gehe zu:


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