Go Down

Topic: extra character ftp code of surfertim (Read 352 times) previous topic - next topic

mikeztrainer

hi,im using ftp code of surfertim with arduino mega2560 and w5100
https://playground.arduino.cc/Code/FTP

i can transfer text file successfully.but the text file transferred to the ftp server has an extra character in the beginning of the text.

heres the character always included in the text file = ÿ

help me what to do to avoid that character.thanks in advance

J-M-L

post your code and explain where you file comes from
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

MarkT

You set the wrong character encoding perhaps?
[ I will NOT respond to personal messages, I WILL delete them, use the forum please ]

Deva_Rishi

I always wonder what is the purpose of all the extra empty lines here Nothing to do with the issue of course, what is the ASCII value of the character ? do you just want to trim it off the text file before storage or send ? Check Mark's answer also, he's onto something.
To 'Correct' you have to be Correct. (and not be condescending..)

mikeztrainer

heres the code,its almost the same with the code of surfer tim,i just change the ip,username and password.

#include <SD.h>
#include <SPI.h>
#include <Ethernet.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, 88, 2 );   
IPAddress gateway( 192, 168, 88, 1 );
IPAddress subnet( 255, 255, 255, 0 );

// change to your server
IPAddress server(192, 168, 88, 1);

EthernetClient client;
EthernetClient dclient;

char outBuf[128];
char outCount;

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

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

}

byte doFTP()
{
#ifdef FTPWRITE
  fh = SD.open(fileName,FILE_READ);
  Serial.println(F("0"));
//#else
//  SD.remove(fileName);
//  fh = SD.open(fileName,FILE_WRITE);
#endif

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

#ifndef FTPWRITE 
  if(!fh.seek(0))
  {
    Serial.println(F("Rewind fail"));
    fh.close();
    return 0;   
  }
#endif
 Serial.println(F("2"));
  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 user"));

  if(!eRcv()) return 0;

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

  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;
 Serial.println(F("3"));
  char *tStr = strtok(outBuf,"(,");
  int array_pasv[6];
  for ( int i = 0; i < 6; i++) {
    tStr = strtok(NULL,"(,");
    array_pasv = atoi(tStr);
    if(tStr == NULL)
    {
      Serial.println(F("Bad PASV Answer"));   

    }
  }
 Serial.println(F("4"));
  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
 Serial.println(F("5"));
  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;
    }
  }
 Serial.println(F("6"));
  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"));
 Serial.println(F("7"));
  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;
 Serial.println(F("8"));
  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);
 Serial.println(F("9"));
  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;   
  }
 Serial.println(F("10"));
  while(fh.available())
  {
    Serial.write(fh.read());
  }

  fh.close();
}

mikeztrainer

#5
Dec 09, 2018, 04:17 pm Last Edit: Dec 09, 2018, 04:19 pm by mikeztrainer
i send file with text "hello"..but after it send to the ftp server,the text becomes "ÿhello"

Deva_Rishi

i send file with text "hello"..but after it send to the ftp server,the text becomes "ÿhello"
If the text file is utf-16 then there is a bit order marker inserted at the start of the file, maybe that's it ... either way, you could just not send the first character. The character that is sent to the FTP server must be in the file, how did you create the file ? oh yeah please post code using code tags.  
To 'Correct' you have to be Correct. (and not be condescending..)

mikeztrainer

i didnt change anything from the code of surfertim,except for the ips user ang password.

mikeztrainer

the character is in the file of test.txt,i dont why it always has that character in beginning of the file.

J-M-L

the character is in the file of test.txt,i dont why it always has that character in beginning of the file.
where does this file come from?
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

outsider

#10
Dec 09, 2018, 08:40 pm Last Edit: Dec 09, 2018, 08:41 pm by outsider
At the bottom of the reply page (NOT quick reply), you see Attachments and other options, click it and then click browse, find the "test.txt" file in your file system and attach it to your reply.

mikeztrainer

#11
Dec 10, 2018, 01:25 am Last Edit: Dec 10, 2018, 01:30 am by mikeztrainer
where does this file come from?
from sdcard of w5100

At the bottom of the reply page (NOT quick reply), you see Attachments and other options, click it and then click browse, find the "test.txt" file in your file system and attach it to your reply.
its just a plain text file.i always check the content of the text.txt file,it never changed,and the length of it is 5 only for hello. maybe theres a problem with my laptop or has s virus.



J-M-L

#12
Dec 10, 2018, 01:30 am Last Edit: Dec 10, 2018, 01:31 am by J-M-L
Who wrote it there ? Does it has the weird byte(s) at the start in the first place ?
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

mikeztrainer

Who wrote it there ? Does it has the weird byte(s) at the start in the first place ?
i make a txt file in my laptop,and paste it in the sdcard, then plug the sd card in w5100.
it doesnt have any wierd bytes ,its just a plain text.after the transfer,i checked the file in laptop,the date of the txt file didnt change.so that weird character comes during the transfer per byte.

J-M-L

#14
Dec 10, 2018, 01:56 am Last Edit: Dec 10, 2018, 01:58 am by J-M-L
Give us the file from your pc and the one from the se card (if you are not using plain ascii but uft8 or utf16 then depending on what your file's content is you can see weird bytes because you'll need multiple bytes for one character symbol)
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Go Up