Avatar billede aashi Nybegynder
19. maj 2003 - 17:29 Der er 11 kommentarer og
1 løsning

server programmering

skal man lave en ny socket når man skal send en to forskellige  hjemme side på browser, vi har en socket men efter vi har vist vores første hjemmeside og hvor der kan indtastes brugernavn og password ,og har hente de oplysninger tilbage til serveren.vi har behandlet dem og så skal vi igen vise  mail
oplysning på browseren, det kan vi ikke, den siger at siden er sent men kan ikke få det vist, skal vi oprette en ny socket eller hvad...
Avatar billede arne_v Ekspert
19. maj 2003 - 18:29 #1
Normalt så har man en server socket der listener på en port og
så accepter man og får en ny socket for hver connection.
Avatar billede arne_v Ekspert
19. maj 2003 - 18:30 #2
Altså den socket der listenes på genbruges men den anden
genbruges ikke og man får en ny for hver connection.
Avatar billede aashi Nybegynder
19. maj 2003 - 18:32 #3
vi har få det til fungerer, men vi den viser indholdet af den anden
html side på samme side skal jeg sende kode så du kan kigge på den
Avatar billede arne_v Ekspert
19. maj 2003 - 18:36 #4
Det er ihvertfald svært at troubleshoote uden at vide lidt mere.

Så lidt kode vil nok være en god ide.
Avatar billede aashi Nybegynder
19. maj 2003 - 18:54 #5
jeg sidder med nogen der kører, men ikke rigtigt så jeg sender nogen om lidt efter jeg har lavet den færdig
Avatar billede aashi Nybegynder
19. maj 2003 - 19:12 #6
Her er noget kode, jeg skev nogen kommentar hvor det går galt , jeg vidste ikke hvormeget jeg skulle sende. håber du kan hjælpe som med noget


if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
            perror("socket");
            exit(1);
        }

        my_addr.sin_family = AF_INET;        /* host byte order */
        my_addr.sin_port = htons(MYPORT);    /* short, network byte order */
        my_addr.sin_addr.s_addr = INADDR_ANY; /* auto-fill with my IP */
        bzero(&(my_addr.sin_zero), 8);        /* zero the rest of the struct */

        if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) \
                                                                      == -1) {
            perror("bind");
            exit(1);
        }

        if (listen(sockfd, BACKLOG) == -1) {
            perror("listen");
            exit(1);
        }

        while(1) {  /* main accept() loop */
            sin_size = sizeof(struct sockaddr_in);
            if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, \
                                                          &sin_size)) == -1) {
                perror("accept");
                continue;
            }
            printf("server: got connection from %s\n", \
                                              inet_ntoa(their_addr.sin_addr));
                                             
                                             
            if (!fork()) { /* this is the child process */


   

    FILE *file;
    file = fopen("Log In.html" ,"rb");
    if(file)
    {
        fseek(file, 0, SEEK_END);
        int fileLength = ftell(file);
        fseek(file, 0, SEEK_SET);
       
        unsigned char *buffer = new unsigned char[fileLength];
        fread(buffer, sizeof(char), fileLength, file);
        fclose(file);

        if(send(new_fd, buffer, fileLength, 0) == -1)
        {
            printf("*error* - could not send\n");
        }
        else
        {
            printf("*success* - sent %i bytes\n", fileLength);
        }
    }   
                       
 

 
 
  int sockfd, numbyte;
 
   
          if ((numbyte=recv(new_fd, userbuf_inn, MAXDATASIZE, 0)) == -1)
              {
                perror("recv username og password: ");
                exit(1);
            }
             
        cout << "buffer indholder = " << userbuf_inn;
   
   
 
    char username[20];
    char password[20];     
    locate(userbuf_inn, "username=", username);// kalder funktionen locate//
    locate(userbuf_inn, "password=", password); 
    printf("Username\%s\n",username);
    printf("Password\%s\n",password);
 

/********************************************MSQL**************************************/

int status=0;

dbid=msqlConnect(NULL);
status=msqlSelectDB(dbid,"mininumdb");

  if(status==-1)
{
perror("Efter_msqlconnect:");
cout<<"msqlErrMsg:databasen kører ikke"<<endl;
}
else
{         
cout<<"************Forbindelsen til databasen er oprettet************"<<endl;
}

/******************Det indtastede username og password sendes til databasen**************/
cout<<"************1************"<<endl;
sprintf(j, "select *from bruger where brugernavn='%s' and adgangskode='%s'",username,password);
cout<<"************ 2************"<< username<<endl;
int i;
i=msqlQuery(dbid,"select *from bruger");
result=msqlStoreResult();
cout<< "antal rækker"<< msqlNumRows(result);
  cout<< "j" << j;
i=msqlQuery(dbid,j);
 
  cout<<"*****3******"<<endl;
  cout<<"i="<< i <<endl;
 
 
result=msqlStoreResult();
  if (i>=1)
  {       


        cout<<"************4************ result ="<< result <<endl;
        row=msqlFetchRow(result);
          cout<<"************5************ row ="<< row <<endl;
          cout<<"bruger er logget ind ="<< j<<endl;
         
  } 
  else
    {
        cout<< " ingen data i databasen" << endl;
          exit(1);
    }

/*********************************indbakke hentes ind***************************/
(sprintf(j, "select *from indbakke where brugernavn='%s'",username));

i=msqlQuery(dbid,j);
result=msqlStoreResult();



string htmlstring;
ant_r= msqlNumRows(result);
ant_k=msqlNumFields(result);
cout<<"Antal kolonner:"<<ant_k<<endl;
cout<<"*****1******"<<endl;
printf("Resultat numrows: %d\n", ant_r);
FILE *indbakkefile;
      indbakkefile = fopen("Indbakke.html" ,"rb");
    if(indbakkefile)
    {
        fseek(indbakkefile, 0, SEEK_END);
        int fileLength = ftell(indbakkefile);
        fseek(indbakkefile, 0, SEEK_SET);
       
        char *indbakkebuffer = new char[fileLength];
        fread(indbakkebuffer, sizeof(char), fileLength, indbakkefile);
        fclose(indbakkefile);
        string htmlstring = indbakkebuffer; // convertering af char til sting


string html =  tabelud( ant_r, ant_k,result, htmlstring);
/*FEJL ...... string html indholder den anden hjemmeside , men den viser indholdet på sammeside)*/

char htmlchr[5000] = {'\0'};
strncat( htmlchr, html.c_str(), 5000); // max 1000 chars
if(send(new_fd, htmlchr, strlen(htmlchr) , 0) == -1)
        {
            printf("*error* - could not send\n");
        }
        else
        {
            printf("*success* - sent %i bytes\n");
  VI FÅR EN SUCCESS MEN INHOLDET BLIVER VIST PÅ SAMME SIDE 
  }
}
}


     
            close(new_fd);
            //exit(0);
           
//------------------------------------------------------------------
            close(new_fd);  /* parent doesn't need this */

            while(waitpid(-1,NULL,WNOHANG) > 0); /* clean up child processes */
        }
 
}
Avatar billede arne_v Ekspert
19. maj 2003 - 19:50 #7
Først ert par små detaljer, som sikkert ikke betydre noget for problem-stillingen:

1)

file = fopen("Log In.html" ,"rb");

HTML er text og derfor bør den åbnes "r" ikke "rb"

2)

file = fopen("Log In.html" ,"rb");
    if(file)
    {
        fseek(file, 0, SEEK_END);
        int fileLength = ftell(file);
        fseek(file, 0, SEEK_SET);
     
        unsigned char *buffer = new unsigned char[fileLength];
        fread(buffer, sizeof(char), fileLength, file);
        fclose(file);

kan godt kræve meget memory hvis filen er stor.

3)

Det er noget meget langt kode, som uden tvivl med fordel kunne
splittes op i nogle funktioner.
Avatar billede arne_v Ekspert
19. maj 2003 - 19:52 #8
Gæt på hvad problemet kunne være:

char htmlchr[5000] = {'\0'};
strncat( htmlchr, html.c_str(), 5000); // max 1000 chars
if(send(new_fd, htmlchr, strlen(htmlchr) , 0) == -1)

strncat skal være en strncpy.
Avatar billede arne_v Ekspert
19. maj 2003 - 19:56 #9
En anden mulighed.

Når du er færdig med at send'e noget, så prøv med en:

fsync(new_fd);

for at flushe output.
Avatar billede arne_v Ekspert
20. maj 2003 - 11:41 #10
Var det fsync der løste problemet ?
Avatar billede aashi Nybegynder
20. maj 2003 - 16:36 #11
nej , det var vores skole computer der var noget galt med ,fandt vi ud af læreren, vi kunne godt vise nyside med computer derhjemme. så det går.
Avatar billede aashi Nybegynder
20. maj 2003 - 16:37 #12
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