Archived Forum PostQuestion:
I am not able to transfer text file over FTPS (with TLS). I am able to establish connection with FTPS server. Able to change the directory, but whenever i am trying to upload the file i am getting below log error. I have given both code details as well as error log details. please help.
Below is my code snippet for transferring file through FTPS server.
Chilkat.Ftp2 ftp = new Chilkat.Ftp2();bool success; // Any string unlocks the component for the 1st 30-days. success = ftp.UnlockComponent("Anything for 30-day trial"); if (success != true) { Console.WriteLine(ftp.LastErrorText); return ftp.LastErrorText; } // If this example does not work, try using passive mode // by setting this to true. ftp.Passive = true; ftp.Hostname = parameters.HostName; ftp.Username = parameters.UserName; ftp.Password = parameters.Password; ftp.Port = 20017; // We don't want AUTH SSL: ftp.AuthTls = true; // We want Implicit SSL: ftp.Ssl = false; // Connect and login to the FTP server. success = ftp.Connect(); if (success != true) { Console.WriteLine(ftp.LastErrorText); ftp.Disconnect(); return ftp.LastErrorText; } else { // LastErrorText contains information even when // successful. This allows you to visually verify // that the secure connection actually occurred. Console.WriteLine(ftp.LastErrorText); Console.WriteLine("FTPS Channel Established!"); success = ftp.ChangeRemoteDir("/"); if (success != true) { return ftp.LastErrorText;//Directory Change Error. } else { //string localfilename = "\\hgsqlp14\\Transfer\\BI\\PWC-t\\test.txt"; //string remotefilename = "test.txt"; //byte[] dataBytes = ConvertToArray(fileStream); success = ftp.PutFile("C:\\Test\\test.txt", "test.txt"); if (success != true) { //ftp.Disconnect(); return "---------Upload Error --------- " + ftp.LastErrorText + "---" ;//Upload Error. } else { ftp.Disconnect(); return "File Uploaded sucessfully."; } } }
The Error log got from Chilkat -
---------Upload Error --------- ChilkatLog:
PutFile:
DllDate: Aug 30 2017
ChilkatVersion: 9.5.0.69
UnlockPrefix: Anything for 30-day trial
Architecture: Little Endian; 32-bit
Language: .NET 4.5
VerboseLogging: 0
RemoteFilename: test.txt
LocalFilename: C:Testtest.txt
ProgressMonitoring:
enabled: yes
heartbeatMs: 0
sendBufferSize: 65536
--ProgressMonitoring
IdleTimeoutMs: 60000
ReceiveTimeoutMs: 60000
ConnectTimeoutSeconds: 30
soRcvBuf: 4194304
soSndBuf: 262144
uploadFromLocalFile:
localFileSize: 39
uploadFromDataSource:
initialGreeting: 220 PwC CFT FTP Server
restartNext: 0
modeZ: 0
binaryMode: 1
pbsz_protp:
simpleCommand:
sendCommand:
sendingCommand: PROT P
--sendCommand
readCommandResponse:
replyLineQP: 200 Protection level set to P
--readCommandResponse
--simpleCommand
--pbsz_protp
setupDataConnection:
passive transfer mode
setupPassiveDataSocket:
sendCommand:
sendingCommand: PASV
--sendCommand
readCommandResponse:
replyLineQP: 227 Entering Passive Mode (172,31,120,157,19,203)
--readCommandResponse
dataConnect:
hostname: 172.31.120.157
port: 5067
socket2Connect:
connect2:
ConnectFailReason: Connection rejected
A few possible causes for a connection being rejected are:
- A firewall (software or hardware), such as Windows Firewall, is blocking the connection .
- Nothing is listening at the remote host:port
--connect2
--socket2Connect
dataConnectSuccess: 0
--dataConnect
setupPassiveDataSocket dataConnect failed.
--setupPassiveDataSocket
Failed to setup passive data socket
--setupDataConnection
Failed to setup data connection for upload.
readRepliesAfterFailedDataConn:
readCommandResponse:
Failed to read beginning of SSL/TLS record.
b: 0
dbSize: 0
nReadNBytes: 0
idleTimeoutMs: 1000
Failed to receive more TLS application data.
tlsApp: Socket operation timeout.
elapsedMs: Elapsed time: 1031 millisec
Failed to read FTP control channel reply.
readFtpReply: Socket operation timeout.
--readCommandResponse
--readRepliesAfterFailedDataConn
--uploadFromDataSource
Failed.
--uploadFromLocalFile
TotalTime: Elapsed time: 22219 millisec
Failed.
--PutFile
--ChilkatLog
try put_PassiveUseHostAddr(true), see https://www.chilkatsoft.com/refdoc/vcCkFtp2Doc.html#prop65
No luck. I have tried this option. But same error I am getting.
In my code I am using different port(20017) rather than default port. I have set port number in my code. But in log I can see the different port 5067 like below.
Could you please let me know if that makes any issue.
dataConnect: hostname: 172.31.120.157 port: 5067 socket2Connect: connect2:
Hello, 5067 is the port used for data transfer. It seems that cannot arrive at 172.31.120.157 , port 5067. Maybe a local firewall or a remote firewall is locking connection. Try it disabling local firewall and local antivirus.
Regards,
See http://cknotes.com/determining-ftp2-connection-settings/
Also, try adding a rule to Windows Firewall that allows your app's executable (.exe) to pass. No need to disable the entire firewall just for testing.. :)
Hello, the port used for passive data transfer is established by the ftp server. In most of ftp servers you can set the port range used in passive transfers. In Windows 2008 R2 and above using IIS server for ftp server you can set port range. In Linux the majority of ftp servers you can set port range. Regards,
Hi David,
The FTP server to which I am connecting has opened port 20017 for data connection.
In the code using chilkat dll I have set the port to 20017. But in log it says that its trying to connect to the port no 5067.
Do you have any ideas regarding this.
Or is it something constraints of chilkat dll that it is not able override the port number.
Please suggest me.
Waiting for your reply.
Thanks, Sabari