FTP Winsock

Winsock Client

Page 1 of 1

0 Replies - 3082 Views - Last Post: 17 March 2008 - 02:13 PM Rate Topic: -----

#1 homemade-jam  Icon User is offline

  • Gabe's Nemesis
  • member icon

Reputation: 11
  • View blog
  • Posts: 1,300
  • Joined: 17-March 08

FTP Winsock

Posted 17 March 2008 - 02:13 PM

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.

// 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,

Is This A Good Question/Topic? 0
  • +

Page 1 of 1