Avatar billede sporgejorgenk Nybegynder
19. oktober 2009 - 22:37 Der er 11 kommentarer og
1 løsning

Program til Server.

Hejsa.

Jeg har programmeret i c++ i noget tid nu, og vil gerne gå videre til noget mere advanceret.
Min server skal bruge et program som jeg gerne vil ´have nogle der kan hjælpe lidt med (:

Historie
Der skal laves to programmer.
Et Server modul som skal være på serveren
og et Amin modul som skal være clienten der udføre handlingerne.

Det skal indeholde:

Login. Altså bruger navn og pass til at logge ind på Admin modulet.
Så man kan se om serveren er online eller offline.
Man skal kunne udføre følgene kommandoer:
Restart server,
Sluk server,
Tænd server via Mac-Adress


Ekstra.
Hvis det er muligt at lave ville det være nice hvis man også kunne få en status list over serveren. Altså man kan se hver gang der sker noget på den, så det bliver logget, i en log fil.


Håber der er nogle der kan hjælpe mig med det :)


Vh Sporge
Avatar billede bertelbrander Novice
19. oktober 2009 - 23:17 #1
Jeg har svaret på spørgsmålet her:
http://www.udvikleren.dk/C/Thread.aspx/1/30037
Avatar billede arne_v Ekspert
20. oktober 2009 - 04:28 #2
Jeg håber at du har fået studeret en del C++.

Du skal kende til:
- TCP/IP socket kommunikation for at forbinde client med server
- GUI programmering f.eks. Win32 API, MFC eller noget lidt mere eksotisk
- multithreading og/eller non-blocking sockets hvis server skal kunne håndtere flere clients
- diverse OS specifikke system kald for at server delen kan interagere med serveren
Avatar billede sporgejorgenk Nybegynder
20. oktober 2009 - 07:12 #3
Ok tak arne_v.
Er der nogle bestemte bøger du kan anbefale til dette formål :)?
Avatar billede arne_v Ekspert
20. oktober 2009 - 23:07 #4
sockets:

Unix Network Programming / Stevens (winsock er en variant af Unix sockets, så den kan godt bruges til Windows)

Win32 API:

Programming Windows / Petzold

MFC:

Programming Windows with MFC / Prosise

multithreading:

Multithreading Applications in Win32 / Jim Beveridge

eller

Win32 Multithreaded Programming / Aaron Cohen
Avatar billede bauerdata Nybegynder
21. oktober 2009 - 10:07 #5
Kom hurtigt igang prøv at kigge på django
http://www.djangoproject.com/
Avatar billede sporgejorgenk Nybegynder
21. oktober 2009 - 13:26 #6
Tak Arne_v er der nogle flere Windows GUI programming

Baurata, det er python
Avatar billede arne_v Ekspert
21. oktober 2009 - 15:33 #7
Petzold og Prosise dækker GUI.

Mne der er sikkert også andre bøger.
Avatar billede sporgejorgenk Nybegynder
21. oktober 2009 - 15:58 #8
Okay tak Arne_v. Når jeg nu lige har din opmærsomhed, vil jeg da også lige spørge om noget andet :).

Kan man godt bygge et c++ program der henter info fra nogle Hjemmesider?
Jeg tænker på hvis jeg nu skal lave et Valutaprogram der henter info fra. Nordea, danskebank. mm?
Og evt en bog eller eksempel på hvordan.

Vh Sporge

Ps. Skriv det som et Svar og ikke Kommentar :)
Avatar billede arne_v Ekspert
21. oktober 2009 - 16:34 #9
Et C++ program kan nemt sende en HTTP requests og hente noget fra en web side.

Jeg vil tro at alle de store browsere IE, FF etc. er skrevet primært i C og C++.

Bemærk at screen scraping af HTML nemt kan blive noget værre spagetti programmering.

Og svar.
Avatar billede sporgejorgenk Nybegynder
21. oktober 2009 - 16:40 #10
Ja det var dejligt at vide :)
Men har du noget guide eller bog værk, til hvordan man lære at hente data fra en hjemmeside ned til c++ program ;)
Avatar billede arne_v Ekspert
21. oktober 2009 - 20:02 #11
Hvis du lærer socket programmering så skal du bare lære HTTP. HTTP kan du slå op i http://www.ietf.org/rfc/rfc2616.txt !

Ellers et hurtigt (og gammelt !) eksempel:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include <windows.h>
#include <errno.h>

void get(char *hostname,int port,char *path, char *fnm)
{
  FILE *fp;
  int sd,status,len,first,tmp;
  char cmd[512],resp[51200],*body;
  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.1\r\nHost: %s\r\nConnection: close\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 response */
  fp = fopen(fnm,"wb");
  first = 1;
  while ((len=recv(sd,resp,sizeof(resp),0))>0) {
      if(first) {
          body = strstr(resp,"\r\n\r\n") + 4;
          first = 0;
      } else {
          body = resp;
      }
      fwrite(body,len-(body-resp),1,fp);
  }
  fclose(fp);
fin:
  closesocket(sd);
  return;
}

int main(int argc,char *argv[])
{
  WSADATA WSAData;
  WSAStartup(0x0101,&WSAData);
  get("www.eksperten.dk",80,"/img/elogo.png","elogo.png");
  WSACleanup();
  return 0;
}
Avatar billede sporgejorgenk Nybegynder
21. oktober 2009 - 20:51 #12
Ok tak for hjælpen
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
Kategori
Kurser inden for grundlæggende programmering

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