Downloaden via socket

Status
Niet open voor verdere reacties.

Xabre

Gebruiker
Lid geworden
22 sep 2007
Berichten
55
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
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é!
 
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.
En wat gaat er mis? Krijg je helemaal geen reactie, alleen de header, slechts een gedeelte van het bestand of een beschadigd bestand?
Het is misschien handig als je ook de code van Updater->Send() en Updater->Receive() post.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan