Hoi,
Ik ben nu al een tijdje bezig met sockets, maar 1 ding dat mij niet lijkt te lukken is bestanden downloaden van het internet, groter dan 60Kb of iets in die aard. Nu kan ik niet gebruik maken van allerlei functies zoals beschreven in urlmon.h ... Ook is het voor mij interessant om eens
te weten hoe het werkelijk gebeurt in de achtergrond.
Mijn code
Alvast bedankt hé!
Ik ben nu al een tijdje bezig met sockets, maar 1 ding dat mij niet lijkt te lukken is bestanden downloaden van het internet, groter dan 60Kb of iets in die aard. Nu kan ik niet gebruik maken van allerlei functies zoals beschreven in urlmon.h ... Ook is het voor mij interessant om eens
te weten hoe het werkelijk gebeurt in de achtergrond.
Mijn code
Code:
ofstream updates; // Een xml-bestand met de url's naar te downloaden programma's
updates.open( Configuration->GetFirstNode()->GetNode(1)->GetAttributeValue("name").c_str() );
updates << (char *)OutputFile->at(1).c_str();
updates.close();
UpdateList = new XML_FILE( Configuration->GetFirstNode()->GetNode(1)->GetAttributeValue("name") );
XML_NODE *Update = UpdateList->GetFirstNode()->GetFirstNode();
while( Update )
{
Updater->Reconnect(); // Herverbinden met laatst gekozen server
Updater->Send("GET /"+Update->GetAttributeValue("file")+" HTTP/1.1\r\nHost : 127.0.0.1\r\nUser-Agent: DBkeep3\r\nConnection: close\r\n\r\n"); //Header met aanvraag voor bestand
FILE *Plugin;
Plugin = fopen( Update->GetAttributeValue("file").c_str(),"wb+" );
string received = "";
bool HeaderPassed = false;
int FileSize = 0;
do
{
Updater->Receive( received );
if( !HeaderPassed )
{
vector <string> Headers = Explode( received,"\r\n" ); //Breekt een string in stukken
vector <string> Temp;
for(int i = 1;i < Headers.size();i++)
{
Temp = Explode( Headers.at(i),": " );
if( Temp.size() > 0 )
{
if( Temp.at(0) == "Content-Length" ) // De bestandsgrootte bepalen
{
FileSize = atoi( Temp.at(1).c_str() );
break;
}
}
Temp.clear();
}
if( HeaderInfo.size() > 0 )
{
}
HeaderPassed = true; //Als de headers gepasseerd zijn, mag er gedownload worden
Headers.clear();
}
else
{
fwrite(received.c_str(),1,received.size(),Plugin);
FileSize -= received.size();
cout << FileSize;
}
cout << "FILESIZE : " <<FileSize << endl; // Kijken hoe groot het bestand nog is
}
while( FileSize > 0 );
HeaderPassed = false;
fclose(Plugin);
Update = UpdateList->GetFirstNode()->GetNextNode();
Updater->Disconnect(); //De verbinding afsluiten met de server nadat het bestand is gedownload
}
Alvast bedankt hé!