1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Servidor TCP

Discussão em 'Programação' iniciada por JomarC, 19 de Maio de 2008. (Respostas: 4; Visualizações: 799)

  1. JomarC

    JomarC Power Member

    Ora boas,

    E assim preciso de fazer um servidor http em linguagem C utilizando “Sockets de Berkeley”.

    Vou por o que ja fiz:

    Código:
    
    
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>

    void main(void){

    struct sockaddr_in me, from;
    int newSock,sock;
    int adl=sizeof(me);
    char dataSize;
    int res;
    char linha[100];
    char *fileNotFound="File Not Found";
    FILE *f;

    /*Open an TCP socket*/
    if ((sock = socket(AF_INET,SOCK_STREAM,0)) < 0) {
    perror("Erro ao criar a socket!!");
    exit(0);
    }

    /*bind the local address so that a client can connect*/
    bzero((char *)&me,adl);
    me.sin_family=AF_INET;
    me.sin_addr.s_addr=htonl(INADDR_ANY);
    me.sin_port=htons(8454); /* porta local */


    if(-1==bind(sock,(struct sockaddr *)&me,adl)){
    close(sock);
    puts("Porta de servidor ocupada...");
    exit(1);
    }
    listen(sock,5);


    for(;;){

    /*blocks until a connection request is done*/
    /*then returns the new socket descriptor, now complete*/

    newSock=accept(sock,(struct sockaddr *)&from,&adl);

    if (newSock < 0) {
    perror("Erro no newSock!!");
    exit(0);
    }

    /*fork the server so one process handle the connection
    and other keeps waiting incoming connection requests*/

    if(newSock!=-1){ /* Importante verificar */

    res=fork();

    if(res){
    if(res== -1)
    puts("Fork Failed...");

    else
    printf("New Child Server Process, PID=%i\n",res);

    /* Processo PAI continua a receber novas conexoes */

    close(newSock);
    }
    else
    {
    /* Processo FILHO serve o cliente */

    close(sock);

    /* E por ai fora*************************************************************/

    close(newSock);
    }
    }
    }
    }

    Código:
    
    
    Basicamente a estrutura ta feita! Agora o problema esta quando o processo filho serve o cliente.

    Tenho que fazer configurações para o numero de porto a usar e o directorio base para a pesquisa de documentos.


    Ninguem da umas luzes ou tutoriais.....agradecido!
     
    Última edição: 19 de Maio de 2008
  2. Make.Love

    Make.Love Banido

    Código:
    if(-1==bind(sock,(struct sockaddr *)&me,adl))
    qual é a razao do -1? não entendi.


    ja agora, coloca o teu texto dentro da tag
    Código:
     --> #
     
  3. JomarC

    JomarC Power Member

     
  4. Make.Love

    Make.Love Banido

    pois, eu entendi que se era -1 dava porta ocupada... e a questao é..porque -1 e nao outro valor negativo?

    quanto ao code metes
    Código:
    [/ code] (sem o espaço entre / e C)...como se tivesses a citar.
     
  5. JomarC

    JomarC Power Member

     

Partilhar esta Página