예제 #1
0
파일: FTPClient.cs 프로젝트: pkim/Hlib
        /// <summary>
        /// Set the type of transfer
        /// </summary>
        /// <param name="_type">The transfer type</param>
        /// <returns>Returns a list of FTPResponseMessages</returns>
        private List <FTPResponseMessage> setTransferType(FTP.TransferModeType _type)
        {
            // Initializatoin
            ArrayList tempMessageList = new ArrayList();
            List <FTPResponseMessage> responseMessages = new List <FTPResponseMessage>();

            // lock the tcpClient
            this.lockTcpClient();

            switch (_type)
            {
            case FTP.TransferModeType.ASCII:

                // set transferType to ASCII
                responseMessages = this.sendCommand(FTPCommand.REPRESENTATION_TYPE, FTP.TransferModeTypeASCII);
                break;


            case FTP.TransferModeType.BINARY:

                // set transferType fo BINARY
                responseMessages = this.sendCommand(FTPCommand.REPRESENTATION_TYPE, FTP.TransferModeTypeBinary);
                break;


            default:

                // unlock the tcpClient
                this.unlockTcpClient();

                // return a empty list
                return(responseMessages);
            }

            if (responseMessages == null)
            {
                return(null);
            }

            if (responseMessages.Count == 0)
            {
                // unlock the tcpClient
                this.unlockTcpClient();

                // return a empty list
                return(responseMessages);
            }


            if (responseMessages[0].ResponseCode != FTPServerResponseCode.CommandOK)
            {
                throw new Exception((String)tempMessageList[0]);
            }

            // unlock the tcpClient
            unlockTcpClient();

            // return the list of responseMessages
            return(responseMessages);
        }
예제 #2
0
파일: FTPClient.cs 프로젝트: pkim/Hlib
        /// <summary>
        /// Initializes a new ftp Client
        /// </summary>
        public FTPClient()
        {
            this.Server = String.Empty;
            this.Port   = FTP.DEFAULT_CONTROL_PORT;

            this.User     = String.Empty;
            this.Password = String.Empty;

            this.ConnectTimeout  = PropertyManager.Property_FTP.InactiveTimeout;
            this.TransferTimeout = PropertyManager.Property_FTP.TransferTimeout;
            this.RecieveTimeout  = PropertyManager.Property_FTP.RecieveTimeout;

            this.ConnectionMode   = PropertyManager.Property_FTP.Connection_Mode;
            this.TransferMode     = PropertyManager.Property_FTP.Transfer_Mode;
            this.TransferModeType = FTP.TransferModeType.ASCII;

            this.AddressFamily = AddressFamily.InterNetwork;

            this.Encoding = Encoding.GetEncoding(PropertyManager.Property_FTP.EncodingCodePage);

            this.tcpClient = new TcpClient();

            this.BlockSize = PropertyManager.Property_FTP.BlockSize;

            this.controlIPEndPoint = null;

            this.isConnected   = false;
            this.isTransfering = false;
        }
예제 #3
0
파일: FTPClient.cs 프로젝트: pkim/Hlib
        public Int64 Download(String _remoteFile, FTP.TransferModeType _transferModeType)
        {
            String localFilePath = String.Format("{0}{1}",
                                                 PropertyManager.Property_FTP.DownloadCachePath,
                                                 _remoteFile
                                                 );

            return(this.Download(_remoteFile, localFilePath, _transferModeType));
        }
예제 #4
0
파일: FTPClient.cs 프로젝트: pkim/Hlib
        public Int64 Download(String _remoteFile, String _localFile, FTP.TransferModeType _transferModeType)
        {
            FileStream    fileStream    = new FileStream(_localFile, FileMode.Create);
            TcpListener   listner       = null;
            TcpClient     client        = null;
            NetworkStream networkStream = null;

            List <FTPResponseMessage> responseMessages = new List <FTPResponseMessage>();

            Byte[] buffer     = new Byte[this.BlockSize];
            Int32  bytes      = new Int32();
            Int64  totalBytes = new Int32();


            this.lockTcpClient();

            this.setTransferType(_transferModeType);

            if (this.ConnectionMode == FTP.ConnectionMode.ACTIVE)
            {
                listner = this.createDataListner();
                listner.Start();
            }

            else
            {
                client = this.createDataClient();
            }


            responseMessages = this.sendCommand(FTPCommand.RETRIEVE, _remoteFile);

            if (responseMessages[0].ResponseCode != FTPServerResponseCode.OpenedNewConnection &&
                responseMessages[0].ResponseCode != FTPServerResponseCode.DataConnectionAlreadyOpen
                )
            {
                throw new Exception(responseMessages[0].Message);
            }


            if (this.ConnectionMode == FTP.ConnectionMode.ACTIVE)
            {
                client = listner.AcceptTcpClient();
            }

            networkStream = client.GetStream();

            do
            {
                bytes       = (Int32)networkStream.Read(buffer, 0, this.BlockSize);
                totalBytes += bytes;

                fileStream.Write(buffer, 0, bytes);
            }while (bytes != 0);

            networkStream.Close();
            client.Close();

            if (this.ConnectionMode == FTP.ConnectionMode.ACTIVE)
            {
                listner.Stop();
            }


            FTPResponseMessage errorMessage;

            if (responseMessages.Count == 1)
            {
                responseMessages = this.readResponse();
                errorMessage     = responseMessages[0];
            }

            else
            {
                errorMessage = responseMessages[1];
            }

            if (errorMessage.ResponseCode != FTPServerResponseCode.DataConnectionClosing)
            {
                throw new Exception(errorMessage.Message);
            }

            fileStream.Close();

            this.unlockTcpClient();

            return(totalBytes);
        }
예제 #5
0
파일: FTPClient.cs 프로젝트: pkim/Hlib
 public Int64 Upload(String _localfile, FTP.TransferModeType _transferModeType)
 {
     return(this.Upload(_localfile, Path.GetFileName(_localfile), _transferModeType));
 }