|   | 
      
        
          
            
              | BOOL Connect( | 
             
            
              |   | 
              LPCTSTR lpszRemoteHost, | 
                | 
             
            
              |   | 
              UINT nRemotePort, | 
                | 
             
            
              |   | 
              LPCTSTR lpszUserName, | 
                | 
             
            
              |   | 
              LPCTSTR lpszPassword, | 
                | 
             
            
              |   | 
              UINT nTimeout, | 
                | 
             
            
              |   | 
              DWORD dwOptions | 
                | 
             
            
              | ); | 
             
           
         
        
          The Connect method establishes a connection with the
          specified server. 
         
        Parameters
        
          
            - lpszRemoteHost
 
            - The name of the server to connect to; this
            may be a fully-qualified domain name or an IP address.
 
            - nRemotePort
 
            - The port number the server is listening on. A value of
            zero specifies that the default port number should be used. For
            standard connections, the default port number is 21. For secure
            connections, the default port number is 990. If the secure port
            number is specified, an implicit TLS connection will be
            established by default.
 
            - lpszUserName
 
            - Points to a string that specifies the user name
            to be used to authenticate the current client session. If this
            parameter is NULL or an empty string, then the login is considered
            to be anonymous. Note that anonymous logins are not supported for
            secure connections using the SSH protocol.
 
            - lpszPassword
 
            - Points to a string that specifies the password
            to be used to authenticate the current client session. This
            parameter may be NULL or an empty string if no password is required
            for the specified user, or if no username has been specified.
 
            - nTimeout
 
            - The number of seconds that the client will wait for a response
            from the server before failing the current operation.
 
            - dwOptions
 
            - An unsigned integer that specifies one or more options. This
            parameter is constructed by using a bitwise operator with any of
            the following values:
 
           
         
        
          
            
              
                | Value | 
                Description | 
               
              
                | FTP_OPTION_PASSIVE | 
                This option specifies the client should attempt to
                establish the data connection with the server. When the client
                uploads or downloads a file, normally the server establishes a
                second connection back to the client which is used to transfer
                the file data. However, if the local system is behind a
                firewall or a NAT router, the server may not be able to create
                the data connection and the transfer will fail. By specifying
                this option, it forces the client to establish an outbound data
                connection with the server. It is recommended that applications
                use passive mode whenever possible. | 
               
              
                | FTP_OPTION_FIREWALL | 
                This option specifies the client should always use the
                host IP address to establish the data connection with the
                server, not the address returned by the server in response to
                the PASV command. This option may be necessary if the server is
                behind a router that performs Network Address Translation (NAT)
                and it returns an unreachable IP address for the data
                connection. If this option is specified, it will also enable
                passive mode data transfers. | 
               
              
                | FTP_OPTION_NOAUTH | 
                This option specifies the server does not require
                authentication, or that it requires an alternate authentication
                method. When this option is used, the client connection is
                flagged as authenticated as soon as the connection to the
                server has been established. Note that using this option to
                bypass authentication may result in subsequent errors when
                attempting to retrieve a directory listing or transfer a file.
                It is recommended that you consult the technical reference
                documentation for the server to determine its specific
                authentication requirements. | 
               
              
                | FTP_OPTION_KEEPALIVE | 
                This option specifies the client should attempt to
                keep the connection with the server active for an extended
                period of time. It is important to note that regardless of this
                option, the server may still choose to disconnect client
                sessions that are holding the command channel open but are not
                performing file transfers. | 
               
              
                | FTP_OPTION_NOAUTHRSA | 
                This option specifies that RSA authentication should not be
                used with SSH-1 connections. This option is ignored with SSH-2
                connections and should only be specified if required by the
                server. This option has no effect on standard or secure
                connections using TLS. | 
               
              
                | FTP_OPTION_NOPWDNUL | 
                This option specifies the user password cannot be
                terminated with a null character. This option is ignored with SSH-2
                connections and should only be specified if required by the
                server. This option has no effect on standard or secure
                connections using TLS. | 
               
              
                | FTP_OPTION_NOREKEY | 
                This option specifies the client should never attempt
                a repeat key exchange with the server. Some SSH servers do not
                support rekeying the session, and this can cause the client to
                become non-responsive or abort the connection after being
                connected for an hour. This option has no effect on standard or
                secure connections using TLS. | 
               
              
                | FTP_OPTION_COMPATSID | 
                This compatibility option changes how the session ID is
                handled during public key authentication with older SSH
                servers. This option should only be specified when connecting
                to servers that use OpenSSH 2.2.0 or earlier versions. This
                option has no effect on standard or secure connections using
                SSL. | 
               
              
                | FTP_OPTION_COMPATHMAC | 
                This compatibility option changes how the HMAC
                authentication codes are generated. This option should only be
                specified when connecting to servers that use OpenSSH 2.2.0 or
                earlier versions. This option has no effect on standard or
                secure connections using TLS. | 
               
              
                | FTP_OPTION_VIRTUALHOST | 
                This option specifies the server supports virtual
                hosting, where multiple domains are hosted by a server using
                the same external IP address. If this option is enabled, the
                client will send the HOST command to the server upon
                establishing a connection. | 
               
              
                | FTP_OPTION_VERIFY | 
                This option specifies that file transfers should be
                automatically verified after the transfer has completed. If the
                server supports the XMD5 command, the transfer will be verified
                by calculating an MD5 hash of the file contents. If the server
                does not support the XMD5 command, but does support the XCRC
                command, the transfer will be verified by calculating a CRC32
                checksum of the file contents. If neither the XMD5 or XCRC
                commands are supported, the transfer is verified by comparing
                the size of the file. Automatic file verification is only
                performed for binary mode transfers because of the end-of-line
                conversion that may occur when text files are uploaded or
                downloaded. | 
               
              
                | FTP_OPTION_TRUSTEDSITE | 
                This option specifies the server is trusted. The
                server certificate will not be validated and the connection
                will always be permitted. This option only affects connections
                using the TLS protocol. | 
               
              
                | FTP_OPTION_SECURE | 
                This option specifies the client should attempt to 
                establish a secure connection with the server. This option is
                the same as specifying FTP_OPTION_SECURE_IMPLICIT which
                immediately performs the TLS protocol negotiation when
                the connection is established. | 
               
              
                | FTP_OPTION_SECURE_IMPLICIT | 
                This option specifies the client should attempt to 
                immediately establish secure TLS connection with the server. This 
                option is typically used when connecting to a server on port 
                990, which is the default port number used for FTPS. | 
               
              
                | FTP_OPTION_SECURE_EXPLICIT | 
                This option specifies the client should establish a 
                standard connection to the server and then use the AUTH command
                to negotiate an explicit secure connection. This option is
                typically used when connecting to the server on ports other
                than 990. | 
               
              
                | FTP_OPTION_SECURE_SHELL | 
                This option specifies the client should use the Secure
                Shell (SSH) protocol to establish the connection. This option
                will automatically be selected if the connection is established
                using port 22, the default port for SSH. | 
               
              
                | FTP_OPTION_SECURE_FALLBACK | 
                This option specifies the client should permit the use 
                of less secure cipher suites for compatibility with legacy 
                servers. If this option is specified, the client will allow 
                connections using TLS 1.0 and cipher suites that use RC4, MD5 
                and SHA1. | 
               
              
                | FTP_OPTION_TUNNEL | 
                This option specifies that a tunneled TCP connection and/or
                port-forwarding is being used to establish the connection to
                the server. This changes the behavior of the client with
                regards to internal checks of the destination IP address and
                remote port number, default capability selection and how the
                connection is established. This option also forces all
                connections to be outbound and enables the firewall
                compatibility features in the client. | 
               
              
                | FTP_OPTION_KEEPALIVE_DATA | 
                This option specifies the client should attempt to keep the 
                control connection active during a file transfer. Normally, when a data 
                transfer is in progress, no additional commands are issued on 
                the control channel until the transfer completes. Specifying 
                this option automatically enables the FTP_OPTION_KEEPALIVE 
                option and forces the client to continue to issue NOOP commands 
                during the file transfer. This option only applies to FTP and 
                FTPS connections and has no effect on connections using SFTP 
                (SSH). | 
               
              
                | FTP_OPTION_PREFER_IPV6 | 
                This option specifies the client should prefer the use of 
                IPv6 if the server hostname can be resolved to both an IPv6 and 
                IPv4 address. This option is ignored if the local system does 
                not have IPv6 enabled, or when the hostname can only be resolved 
                to an IPv4 address. If the server hostname can only be resolved 
                to an IPv6 address, the client will attempt to establish a 
                connection using IPv6 regardless if this option has been 
                specified. | 
               
              
                | FTP_OPTION_FREETHREAD | 
                This option specifies the handle returned by this
                function may be used by any thread, and is not limited to the
                thread which created it. The application is responsible for
                ensuring that access to the handle is synchronized across
                multiple threads. | 
               
              
                | FTP_OPTION_HIRES_TIMER | 
                This option specifies the elapsed time for data 
                transfers should be returned in milliseconds instead of seconds. 
                This will return more accurate transfer times for smaller files 
                being uploaded or downloaded using fast network connections. | 
               
              
                | FTP_OPTION_TLS_REUSE | 
                This option specifies that TLS session reuse should be 
                enabled for secure connections. This option is only supported on 
                Windows 8.1 or Windows Server 2012 R2 and later platforms, and it
                should only be used when explicitly required by the server. This 
                option is not compatible with servers built using OpenSSL 1.0.2 
                and earlier versions which do not provide Extended Master Secret 
                (EMS) support as outlined in RFC7627. | 
               
             
           
         
        Return Value
        
          If the method succeeds, the return value is a non-zero. If the
          method fails, the return value is zero. To get extended error
          information, call GetLastError. 
         
        Remarks
        
          This method will block the current thread until a connection has 
          been established or the timeout period has elapsed. To prevent it from
          blocking the main user interface thread, the application should create
          a background worker thread and establish a connection by calling the
          Connect method in that thread. If the application
          requires multiple simultaneous connections, it is recommended you
          create a worker thread for each connection. 
          
          If the FTP_OPTION_KEEPALIVE option is specified, a background
          worker thread will be created to monitor the command channel and
          periodically send NOOP commands to the server if no commands have
          been sent recently. This can prevent the server from terminating the
          client connection during idle periods where no commands are being
          issued. However, it is important to keep in mind that many servers
          can be configured to also limit the total amount of time a client can
          be connected to the server, as well as the amount of time permitted
          between file transfers. If the server does not respond to the NOOP
          command, this option will be automatically disabled for the remainder
          of the client session. 
          If the FTP_OPTION_SECURE_EXPLICIT option is specified, the client
          will establish a standard connection to the server and send the AUTH
          TLS command to the server. If the server does not accept this command,
          it will then send the AUTH SSL command. If both commands are rejected
          by the server, an explicit TLS session cannot be established. By
          default, both the command and data channels  will be encrypted when a
          secure connection is established. To change this, use the
          SetChannelMode method. 
          The dwOptions argument can be used to specify the threading
          model that is used by the class when a connection is established. By
          default, the client session is initially attached to the thread that
          created it. From that point on, until the connection is terminated,
          only the owner may invoke methods in that instance of the class. The
          ownership of the class instance may be transferred from one thread to
          another using the AttachThread method. 
          Specifying the FTP_OPTION_FREETHREAD option enables any thread to
          call methods in any instance of the class, regardless of which thread
          created it. It is important to note that this option disables certain
          internal safety checks which are performed by the class and may
          result in unexpected behavior unless access to the class instance is
          synchronized. If one thread calls a method in the class, it must
          ensure that no other thread will call another method at the same time
          using the same instance. 
         
        Example
        
          
// Connect to a server using a standard (non-secure) connection on
// the default port. The username and password are not encrypted.
bResult = ftpClient.Connect(lpszRemoteHost,
                            FTP_PORT_DEFAULT,
                            lpszUserName,
                            lpszPassword,
                            FTP_TIMEOUT,
                            FTP_OPTION_DEFAULT);      
// Connect to a server using the default port and then initiate a
// secure connection using the AUTH TLS command
bResult = ftpClient.Connect(lpszRemoteHost,
                            FTP_PORT_DEFAULT,
                            lpszUserName,
                            lpszPassword,
                            FTP_TIMEOUT,
                            FTP_OPTION_PASSIVE | FTP_OPTION_SECURE_EXPLICIT);
// Connect to a server on port 990 and immediately initiate a
// secure connection as soon as the connection is established
bResult = ftpClient.Connect(lpszRemoteHost,
                            FTP_PORT_SECURE,
                            lpszUserName,
                            lpszPassword,
                            FTP_TIMEOUT,
                            FTP_OPTION_PASSIVE | FTP_OPTION_SECURE_IMPLICIT);
// Connect to a server on port 22 using the Secure Shell (SFTP)
// protocol to transfer files
bResult = ftpClient.Connect(lpszRemoteHost,
                            FTP_PORT_SSH,
                            lpszUserName,
                            lpszPassword,
                            FTP_TIMEOUT,
                            FTP_OPTION_SECURE_SHELL);
         
        Requirements
        
          Minimum Desktop Platform: Windows 7 Service Pack 1 
          Minimum Server Platform: Windows Server 2008 R2 Service Pack 1 
          Header File: cstools11.h 
          Import Library: csftpv11.lib 
          Unicode: Implemented as Unicode and ANSI versions 
         
        See Also
        
          
            ConnectUrl,
            CreateSecurityCredentials,
            Disconnect, 
            GetSecurityInformation, 
            ProxyConnect, 
            SetChannelMode
           
         
       | 
        |