Welcome to Dream.In.Code
Become a C++ Expert!

Join 136,926 C++ Programmers for FREE! Get instant access to thousands of C++ experts, tutorials, code snippets, and more! There are 1,803 people online right now. Registration is fast and FREE... Join Now!




FTP Winsock

 
Reply to this topicStart new topic

FTP Winsock, Winsock Client

homemade-jam
17 Mar, 2008 - 01:13 PM
Post #1

eeeAddict
Group Icon

Joined: 17 Mar, 2008
Posts: 1,067



Thanked: 1 times
Dream Kudos: 25
My Contributions
Hello,

Here is a piece of code that I have written that is supposed to connect to an ftp server on my lan and download a file...it connects fine but the server doesn't seem to be reading the USER .... and PASS.. etc.
Apologies for all the commenting out.

CODE

// The backend ftp communication channel for downloading files off servers
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <wspiapi.h>
#include <windows.h>
// Need to link with Ws2_32.lib, Mswsock.lib, and Advapi32.lib

#define DEFAULT_BUFLEN 100
#define DEFAULT_PORT "21"

int main()
{
    WSACleanup();
    WSADATA wsaData;
    SOCKET ConnectSocket = INVALID_SOCKET;
    struct addrinfo *result = NULL,
                    *ptr = NULL,
                    hints;
    printf("Welcome to Ed's Console FTP Client\n");
    char *sendbufnewline = "\n";
    char *sendbuf = "USER bla\n";
    char *sendbuf2 = "PASS bla\n";
    char *sendbuf3 = "CWD /general/\n";
    char *sendbuf4 = "get test.txt\n";
    char recvbuf[DEFAULT_BUFLEN];
    int iResult;
    int recvbuflen = DEFAULT_BUFLEN;
    

    // Initialize Winsock
    iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
    if (iResult != 0) {
        printf("WSAStartup failed: %d\n", iResult);
        return 1;
    }

    ZeroMemory( &hints, sizeof(hints) );
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;

    // Resolve the server address and port
    iResult = getaddrinfo("192.168.1.76", DEFAULT_PORT, &hints, &result);
    if ( iResult != 0 ) {
        printf("getaddrinfo failed: %d\n", iResult);
        WSACleanup();
        return 1;
    }

    // Attempt to connect to an address until one succeeds
    for(ptr=result; ptr != NULL;ptr=ptr->ai_next) {

        // Create a SOCKET for connecting to server
        ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype,
            ptr->ai_protocol);
        if (ConnectSocket == INVALID_SOCKET) {
            printf("Error at socket(): %ld\n", WSAGetLastError());
            freeaddrinfo(result);
            WSACleanup();
            return 1;
        }
        
        // Connect to server.
        iResult = connect(ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
        if (iResult == SOCKET_ERROR) {
            closesocket(ConnectSocket);
            ConnectSocket = INVALID_SOCKET;
            continue;
        }
        iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
        printf(recvbuf);
      //  printf("\n");
     //   Sleep(2000);
        break;
    }
// Sleep(2000);
    freeaddrinfo(result);

    if (ConnectSocket == INVALID_SOCKET) {
        printf("Unable to connect to server!\n");
        WSACleanup();
        return 1;
    }
// iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
// printf(recvbuf, iResult);
    // Send an initial buffer
    iResult = send(ConnectSocket, sendbuf, (int)strlen(sendbuf), 0 );
    printf("Bytes Sent: %ld\n", iResult);
    if (iResult == SOCKET_ERROR) {
        printf("send failed: %d\n", WSAGetLastError());
        closesocket(ConnectSocket);
        WSACleanup();
        return 1;
    }
// iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
// printf(recvbuf);
// printf("USER \n");
//  Sleep(2000);
//   iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
//   printf(recvbuf);
//   Sleep(2000);
   iResult = send(ConnectSocket, sendbuf2, (int)strlen(sendbuf2), 0 );
   if (iResult == SOCKET_ERROR) {
        printf("send failed: %d\n", WSAGetLastError());
        closesocket(ConnectSocket);
        WSACleanup();
        return 1;
    }
    printf("PASS ljkkj\n%d\n", iResult);
//   iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
//   printf(recvbuf);
  
//  if (recv != "230 Login successful.") { closesocket(ConnectSocket); WSACleanup(); return 1; }
// shutdown the connection since no more data will be sent

    iResult = send(ConnectSocket, sendbuf3, (int)strlen(sendbuf3), 0 );
//   iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
//    Sleep(2000);
//   printf(recvbuf, iResult);
    iResult = send(ConnectSocket, sendbuf4, (int)strlen(sendbuf4), 0 );
//    iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
    printf("So Far so good...");
//    Sleep(2000);
    iResult = shutdown(ConnectSocket, SD_SEND);
    if (iResult == SOCKET_ERROR) {
        printf("shutdown failed: %d\n", WSAGetLastError());
        closesocket(ConnectSocket);
        WSACleanup();
        return 1;
    }

    // Receive until the peer closes the connection
/*    do {

        iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);
        if ( iResult > 0 )
            printf("Bytes received: %d\n", iResult);
        else if ( iResult == 0 )
            printf("Connection closed\n");
        else
            printf("recv failed: %d\n", WSAGetLastError());

    } while( iResult > 0 );
*/
    // cleanup
    closesocket(ConnectSocket);
    WSACleanup();
Sleep(2000);
    return 0;
}


Thanks for looking,

User is offlineProfile CardPM
+Quote Post

Reply to this topicStart new topic
Time is now: 12/3/08 10:22PM

Live C++ Help!

C++ Tutorials

Reference Sheets

C++ Snippets

DIC Chatroom

Bye Bye Ads

Monthly Drawing

Thumb Drive

Top Contributors

Top 10 Kudos This Month