rendered paste body//Client to Aaron's fileserver
//Author $ Dylan Johnston
//Connect $ bitforge.redirectme.net:404
//Notes $ Win-sock-two
#include <cstdlib>
#include <iostream>
#include <string>
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#define WIN32_LEAN_AND_MEAN
using namespace std;
const string DEBUG = "[debug]: ";
const string INPUT = "[input]: ";
const string BYTES = "[bytes]: ";
char serverAddress[4096];
//typedef unsigned char byte;
//byte myBuffer[4097]; //<3 Aaron[]
char sendbuf[4096];
char recvbuf[4096];
char backup[4096];
char *result;
SOCKET bytesSent;
SOCKET bytesRecv;
SOCKET ConnectSocket;
int KeepLooping = 1;
int UseTheNetwork = 0;
int Commands(char sCom[])
{
strcpy (backup,sCom);
//LIST CONTENTS IN CURRENY DIRECTORY (kinda useless?)
if (!strcmp(sCom, "list")){
UseTheNetwork = 1;
sprintf(sendbuf, "002\r\n");
bytesSent = send( ConnectSocket, sendbuf, strlen(sendbuf), 0 );
cout << DEBUG << "command \"list\" sent\n";
//QUIT CLIENT PROPERLY
} else if (!strcmp(sCom, "quit")){
KeepLooping = 0;
//MAKE DIRECTORY CODE #004
} else if ( !strcmp( "mkdir", strtok( sCom, " " ) ) ) {
UseTheNetwork = 1;
strtok( backup, " " );
sprintf( sendbuf, "004 \"%s\"\r\n", strtok( NULL, " " ) );
bytesSent = send( ConnectSocket, sendbuf, strlen(sendbuf), 0 );
cout << DEBUG << "command \"mkdir\" sent\n";
//CHANGE DIRECTORY CODE #005
} else if ( !strcmp( "cd", strtok( sCom, " " ) ) ) {
UseTheNetwork = 1;
strtok( backup, " " );
sprintf( sendbuf, "005 \"%s\"\r\n", strtok( NULL, " " ) );
bytesSent = send( ConnectSocket, sendbuf, strlen(sendbuf), 0 );
cout << DEBUG << "command \"cd\" sent\n";
//IF COMMAND IS UNKNOWN [we won't let it even be able to be sent]
} else {
UseTheNetwork = 0;
cout << "unknown command\n";
}
}
int main()
{
//ONLY REAL CONSOLE GUI FUNTION :D
SetConsoleTitle("FILESERVER CLIENT");
int iResult;
WSADATA wsaData; //start winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult != 0)
{
cout << DEBUG << "failed" << iResult << "\n";
return 0;
closesocket( ConnectSocket );
}
cout << DEBUG << "successful startup of winsock\n";
//SOCKET ConnectSocket;
ConnectSocket = socket(AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP);
if (ConnectSocket == INVALID_SOCKET)
{
cout << DEBUG << "error " << WSAGetLastError();
closesocket( ConnectSocket );
closesocket( ConnectSocket );
}
addrinfo *aiList = 0;
addrinfo aiHints = {0};
aiHints.ai_family = AF_UNSPEC;
aiHints.ai_socktype = SOCK_STREAM;
aiHints.ai_protocol = IPPROTO_TCP;
cout << INPUT << "address: ";
gets(serverAddress);
//GET IP FROM DNS
if (getaddrinfo( serverAddress, "404", &aiHints, &aiList ) != 0 )
{
cout << DEBUG << "the address did not resolve\n";
closesocket( ConnectSocket );
WSACleanup();
system("Pause");
return 0;
}
int result;
cout << DEBUG << "connecting..." << "\n";
addrinfo * current = aiList;
//CONNECT TO SERVER
while ( current != 0 )
{
result = connect( ConnectSocket, current->ai_addr, (int)current->ai_addrlen );
if ( result == SOCKET_ERROR )
{
closesocket( ConnectSocket );
current = current->ai_next;
} else {
cout << DEBUG << "successfully connected to " << serverAddress << "\n";
break;
}
}
//gets the GAYEST WELCOME MESSAGE EVER
while( bytesRecv != SOCKET_ERROR ) {
bytesRecv = recv( ConnectSocket, recvbuf, 4096, 0 );
if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) {
cout << DEBUG << "connection closed\n";
break;
} else {
cout << BYTES;
printf( "Bytes Recv: %ld\n", bytesRecv );
cout << DEBUG << recvbuf << "\n";
break;
}
}
while (KeepLooping = 1){
cout << INPUT << "message: ";
gets(sendbuf);
Commands(sendbuf);
if (KeepLooping == 0){
cout << DEBUG << "breaking main loop\n";
break;
} else if (UseTheNetwork == 1){
while( bytesRecv != SOCKET_ERROR ) {
bytesRecv = recv( ConnectSocket, recvbuf, 4096, 0 );
if ( bytesRecv == 0 || bytesRecv == WSAECONNRESET ) {
cout << DEBUG << "connection closed\n";
break;
} else {
int recvint;
sscanf(recvbuf, "%03d", &recvint);
cout << DEBUG << "recvbuf = " << recvint << "\n";
if (bytesRecv == 3){
cout << BYTES;
printf( "Bytes Recv: %ld\n", bytesRecv );
cout << DEBUG << recvbuf << "\n";
} else {
break;
}
}
}
} else {
cout << DEBUG << "not sending network\n";
}
}
cout << DEBUG << "program termination\n";
closesocket( ConnectSocket );
system("Pause");
WSACleanup();
return 0;
}