extra character ftp code of surfertim

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