Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <windows.h>
- #include <iostream>
- #include <conio.h>
- #include <string>
- #include <sstream>
- #include <fstream>
- #pragma comment (lib,"Ws2_32.lib")
- using namespace std;
- int StringToInt(string s)
- {
- return atoi(s.c_str());
- }
- class Sock
- {
- private:
- WSADATA wsa;
- SOCKET sock;
- SOCKET DataSock;
- SOCKADDR_IN cel;
- SOCKADDR_IN local;
- SOCKADDR_IN DataAddr;
- int err;
- string host;
- public:
- Sock();
- void Connect(string IP);
- int DataConnect(int Port);
- void SetNonBlock(bool state);
- void WyslijWiersz(string co);
- int PobierzHosta(string alias, sockaddr_in &addr);
- string Odbierz();
- string OdbierzDane();
- void OdbierzPlik(string nazwa,int rozmiar);
- int PobierzPort(string s);
- ~Sock();
- };
- Sock::Sock()
- {
- err = 0;
- //====WSA====
- if(WSAStartup(MAKEWORD(2,2), &wsa) != 0)
- {
- cout <<"Bład podczas inicjalizacji WSA: "<<WSAGetLastError();
- }
- else cout <<"Zainicjalizowano WSA."<<endl;
- //SOCKET
- sock = socket(AF_INET, SOCK_STREAM, 0);
- if(sock == INVALID_SOCKET)
- {
- cout <<"Błąd inicalizacji gniazda: "<<WSAGetLastError();
- }
- else cout <<"Zainicjalizowano gniazdo."<<endl;
- cel.sin_family = AF_INET;
- }
- Sock::~Sock()
- {
- closesocket(sock);
- shutdown(sock,2);
- closesocket(DataSock);
- shutdown(DataSock,2);
- WSACleanup();
- cout << "Posprzatano" << endl;
- }
- void Sock::Connect(std::string IP)
- {
- host = IP;
- sockaddr_in addr;
- PobierzHosta(IP, addr);
- cel.sin_addr.s_addr = addr.sin_addr.s_addr;
- cel.sin_port = htons(21);
- if(connect(sock, (SOCKADDR*)&cel, sizeof(cel)) != 0 )
- {
- cout << "Nie udalo sie poalczyc z serwerem."<<endl;
- }
- else
- {
- cout <<"Polaczono z serwerem"<<endl;
- }
- }
- int Sock::PobierzHosta(string alias,sockaddr_in &addr)
- {
- hostent* hInfo = NULL;
- hInfo = gethostbyname(alias.c_str());
- if(hInfo == NULL)
- {
- int err = WSAGetLastError();
- if(err == WSAHOST_NOT_FOUND || err == WSANO_DATA) cout << "Nie znaleziono hosta\n";
- else cout << "Blad: " << err << endl;
- return -1;
- }
- if(hInfo->h_addrtype == AF_INET) addr.sin_addr.s_addr = *(u_long *) hInfo->h_addr_list[0];
- else return -1;
- return 0;
- }
- void Sock::SetNonBlock(bool state)
- {
- u_long tryb = state;
- if(ioctlsocket(sock,FIONBIO,&tryb) == NO_ERROR)
- {
- cout << "Zmieniono tryb gniazda." << endl;
- }
- else
- {
- cout << "Blad: " << WSAGetLastError() << endl;
- }
- }
- string Sock::Odbierz()
- {
- string s = "";
- fd_set set;
- timeval timeout = {0,1000000};
- char bufor[1024];
- memset(bufor,0,1024);
- do
- {
- FD_ZERO(&set);
- FD_SET(sock,&set);
- err = select(FD_SETSIZE, &set,NULL,NULL,&timeout);
- if(FD_ISSET(sock,&set) != 0)
- {
- err = recv(sock,bufor,1023,0);
- if(err > 0)
- {
- bufor[err]=0;
- s+= bufor;
- }
- }
- }
- while(err != 0);
- return s;
- }
- void Sock::WyslijWiersz(string co)
- {
- stringstream ss;
- ss << co.length();
- int wyslano = 0;
- int n=0;
- co += "\r\n";
- do
- {
- n = send(sock,co.c_str(),co.length(),0);
- if(n<= 0)
- {
- cout << "Cos nie tak z wyslaniem tekstu" << endl;
- break;
- }
- wyslano += n;
- }
- while(wyslano != co.length());
- }
- int Sock::PobierzPort(string s)
- {
- size_t PozycjaOstatniegoPrzecinka = s.find_last_of(",");
- int ilosc = s.find_last_of(")")-PozycjaOstatniegoPrzecinka-1;
- int NajmniejZnaczacy = StringToInt(s.substr(PozycjaOstatniegoPrzecinka+1,ilosc));
- size_t PozycjaPrzedOstatniegoPrzecinka = s.substr(0,PozycjaOstatniegoPrzecinka).find_last_of(",",PozycjaOstatniegoPrzecinka);
- ilosc = PozycjaOstatniegoPrzecinka - PozycjaPrzedOstatniegoPrzecinka - 1;
- int NajbardziejZnaczacy = StringToInt(s.substr(PozycjaPrzedOstatniegoPrzecinka+1,ilosc));
- return NajbardziejZnaczacy*256+NajmniejZnaczacy;
- }
- int Sock::DataConnect(int port)
- {
- DataAddr.sin_family = AF_INET;
- DataAddr.sin_port = htons(port);
- DataAddr.sin_addr.s_addr = cel.sin_addr.s_addr;
- DataSock = socket(AF_INET,SOCK_STREAM,0);
- if(connect(DataSock,(SOCKADDR*)&DataAddr,sizeof(cel)) !=0)
- {
- cout << "Blad utworzenia polaczenia dla danych" << endl;
- return 1;
- }
- else
- {
- cout << "Ustanowiono polaczenie dla danych" <<endl;
- return 0;
- }
- }
- void Sock::OdbierzPlik(std::string nazwa, int rozmiar)
- {
- unsigned int sumadanych = 0;
- fd_set set;
- timeval timeout = {0,1000000};
- char bufor[1024];
- memset(bufor,0,1024);
- ofstream plik;
- //plik.open(&nazwa,std::ios::out | std::ios::binary);
- if(plik.good() == 0)
- {
- cout << "Nie udalo sie otworzyc pliku" << endl;
- return;
- }
- else
- {
- cout << endl;
- do
- {
- FD_ZERO(&set);
- FD_SET(DataSock,&set);
- err = select(FD_SETSIZE,&set,NULL,NULL,&timeout);
- memset(bufor,0,1024);
- if(FD_ISSET(DataSock,&set) != 0)
- {
- err = recv(DataSock,bufor,1024,0);
- if(err > 0)
- {
- plik.write(bufor,err);
- sumadanych += err;
- }
- }
- }while(err != 0);
- }
- plik.close();
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- Sock hPolaczenie;
- hPolaczenie.Connect("91.210.242.203");
- hPolaczenie.SetNonBlock(true);
- cout << "\r\n" << endl;
- cout << "POWITANIE"<< endl;
- cout << hPolaczenie.Odbierz();
- hPolaczenie.WyslijWiersz("USER renault_ftp");
- cout << hPolaczenie.Odbierz();
- hPolaczenie.WyslijWiersz("PASS 3edc4rfv");
- cout << hPolaczenie.Odbierz();
- hPolaczenie.WyslijWiersz("CDUP");
- cout << hPolaczenie.Odbierz();
- // Tryb Binarny
- hPolaczenie.WyslijWiersz("TYPE I");
- cout << hPolaczenie.Odbierz();
- hPolaczenie.WyslijWiersz("PASV");
- string info = hPolaczenie.Odbierz();
- int port = hPolaczenie.PobierzPort(info);
- hPolaczenie.DataConnect(port);
- hPolaczenie.WyslijWiersz("SIZE KatalogRenault.zip");
- cout << hPolaczenie.Odbierz();
- string rozm = hPolaczenie.Odbierz();
- int rozmiar = StringToInt(rozm.substr(4,rozm.length()-5));
- hPolaczenie.WyslijWiersz("RETR KatalogRenault.zip");
- cout << hPolaczenie.Odbierz();
- hPolaczenie.OdbierzPlik("KatalogRenault.zip",rozmiar);
- cout << hPolaczenie.Odbierz();
- hPolaczenie.WyslijWiersz("STOR KatalogRenault.zip");
- cout << hPolaczenie.Odbierz();
- getchar();
- return 0;
- }
Add Comment
Please, Sign In to add comment