Avatar billede code_freak Nybegynder
27. september 2003 - 20:16 Der er 1 løsning

newbie og socket stopper efter første request

Jeg har fundet dette stykke code, og vil rette det til efter hvad jeg skal bruge det til, og ligenu kan jeg få det til at virke, men dog ikke helt.

Når jeg køre programmet, skaber den sej meget mærkeligt, den første client der connecter, henter og sender data som den skal. men efter lukker min serverside, men vis jeg vil åbne programmet igen på samme port siger den porten stadig er i brug i c.a 5 minutter efter...

Kan man få den til at kunne forsætte med at køre... og måske kunne behandle flere clienter på een gang.


Jeg er super newbie, så vis i can fortælle hvad i mener med det i skriver :)


Den kode jeg har fundet

-----------------


/* A simple server in the internet domain using TCP
  The port number is passed as an argument */
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

void error(char *msg)
{
    perror(msg);
    exit(1);
}

int main(int argc, char *argv[])
{
    int sockfd, newsockfd, portno, clilen;
    char buffer[256];
    struct sockaddr_in serv_addr, cli_addr;
    int n;
    if (argc < 2) {
        fprintf(stderr,"ERROR, no port provided\n");
        exit(1);
    }
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
        error("ERROR opening socket");
    bzero((char *) &serv_addr, sizeof(serv_addr));
    portno = atoi(argv[1]);
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(portno);
    if (bind(sockfd, (struct sockaddr *) &serv_addr,
              sizeof(serv_addr)) < 0)
              error("ERROR on binding");
    listen(sockfd,5);
    clilen = sizeof(cli_addr);
    newsockfd = accept(sockfd,
                (struct sockaddr *) &cli_addr,
                &clilen);
    if (newsockfd < 0)
          error("ERROR on accept");
    bzero(buffer,256);
    n = read(newsockfd,buffer,255);
    if (n < 0) error("ERROR reading from socket");
    printf("Here is the message: %s\n",buffer);
    n = write(newsockfd,"I got your message",18);
    if (n < 0) error("ERROR writing to socket");
    return 0;
}
Avatar billede arne_v Ekspert
27. september 2003 - 20:32 #1
Du skal have en løkke omkring accept+read+write !

En simpel løkke = en server som kan behandle mange klienter men
kun en af gangen.

En løkke + threads/forking = en server som kan behandle mange
klienter samtidigt.
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