Avatar billede mysitesolution Nybegynder
26. oktober 2002 - 18:46 Der er 10 kommentarer og
2 løsninger

download i c++

Hvad skal jeg skrive for at downloade en fil fra nettet

mit console program ser ud som dette

#include <iostream.h>

int main()

{


cout << "Vent venligst...downloader";

}

det må gerne vise hvor langt det er noget, men behøves ikke
Avatar billede arne_v Ekspert
26. oktober 2002 - 18:59 #1
Hvis du vil downloade med HTTP protokollen, så:

- åbner du en socket til den relevante host på port 80
- sender "GET path-på-det-du-vil-have HTTP/1.0\r\n\r\n"
- læser headerne i svaret indtil der komemr en blank linie
- læser filen
Avatar billede mysitesolution Nybegynder
26. oktober 2002 - 19:03 #2
jeg vil gerne have kode, tak :)
Avatar billede arne_v Ekspert
26. oktober 2002 - 19:49 #3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <socket.h>
#include <netdb.h>

#include <unixio.h>
#include <errno.h>

void test(char *hostname,int port,char *path,char *fnm)
{
  FILE *fp;
  int sd,status,len,tmp,data,ix;
  char cmd[512],resp[5120];
  struct sockaddr local,remote;
  struct hostent *hostinfo;
  /* create socket */
  sd=socket(AF_INET,SOCK_STREAM,0);
  if(sd<0) {
      printf("Error creating socket: %s\n",strerror(errno));
      goto fin;
  }
  /* bind socket */
  local.sa_family=AF_INET;
  memset(local.sa_data,0,sizeof(local.sa_data));
  status=bind(sd,&local,sizeof(local));
  if(status<0) {
      printf("Error binding socket: %s\n",strerror(errno));
      goto fin;
  }
  /* lookup host */
  hostinfo=gethostbyname(hostname);
  if(!hostinfo) {
      printf("Error looking up host: %s\n",hostname);
      goto fin;
  }
  /* connect to host */
  remote.sa_family=hostinfo->h_addrtype;
  memcpy(remote.sa_data+2,hostinfo->h_addr_list[0],hostinfo->h_length);
  *((short *)remote.sa_data)=port;
  tmp=remote.sa_data[0];
  remote.sa_data[0]=remote.sa_data[1];
  remote.sa_data[1]=tmp;
  status=connect(sd,&remote,sizeof(remote));
  if(status!=0) {
      printf("Error connecting to host: %s port: %d\n",hostname,port);
      goto fin;
  }
  /* send GET request */
  sprintf(cmd,"GET %s HTTP/1.0\r\nHost: %s\r\n\r\n",path,hostname);
  status=send(sd,cmd,strlen(cmd),0);
  if(status<0) {
      printf("Error sending GET request\n");
      goto fin;
  }
  /* read header */
  data=0;
  while ((len=recv(sd,resp,sizeof(resp),0))>0) {
      if(!data) {
        ix = strstr(resp,"\r\n\r\n") - resp + 4;
        fp = fopen(fnm,"wb");
        data=1;
        fwrite(resp+ix,len-ix,1,fp);
      } else {
        fwrite(resp,len,1,fp);
      }
  }
  fclose(fp);
fin:
  close(sd);
  return;
}
Avatar billede arne_v Ekspert
26. oktober 2002 - 19:51 #4
Og så kommer alle men'erne:
  - du skal muligvis inkludere andre header-filer
    alt afhængig af din platform
  - nogle web-servere kan muligvis finde på kun
    ad askille header records med \r eller \n i.s.f. \r\n
  - koden forudsætter at data starter inden d.v.s. at headerne
    er mindre end 5120 bytes
Avatar billede arne_v Ekspert
26. oktober 2002 - 19:54 #5
Hvis du bare skal bruge funktionaliteten standalone,
så download et af de mange programmer der har løst
mange af alle de praktiske problemer som f.eks.
wget !
Avatar billede mysitesolution Nybegynder
26. oktober 2002 - 19:57 #6
den kan ikke finde

#include <socket.h>
#include <netdb.h>

#include <unixio.h>
Avatar billede mysitesolution Nybegynder
26. oktober 2002 - 19:58 #7
jeg bruger dev c++
Avatar billede mysitesolution Nybegynder
26. oktober 2002 - 20:02 #8
hvad er det for nogen programmer
Avatar billede arne_v Ekspert
26. oktober 2002 - 20:16 #9
Der er lavet masser af programmer til at downloade
filer med fra internettet.

GUI og command-line.

wget er nok det mest kendte.

Det kan du også downloade til Windows.

Og med source-code (men jeg vil ikke garantere
at det kan compiles med dev c++).
Avatar billede arne_v Ekspert
26. oktober 2002 - 20:20 #10
Du kan installere wget via setup fra http://sources.redhat.com/cygwin/.

Eller downloade den fra ftp://mirrors.rcn.net/mirrors/sources.redhat.com/cygwin/release/wget,
men så skal du også selv finde og downloade diverse
andre pakker den måtte bruge.
Avatar billede arne_v Ekspert
26. oktober 2002 - 20:20 #11
Eller du kan snuppe source code og se, hvordan de gør det.
Avatar billede mysitesolution Nybegynder
27. oktober 2002 - 02:47 #12
nå jeg fik det ikke til at virke men du skal da have 30 points
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester