Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
pua:servidor_tcp [2010/09/29 21:36] mazieropua:servidor_tcp [2014/03/27 09:29] (atual) maziero
Linha 1: Linha 1:
 +====== Exemplo TCP: Um micro-servidor WWW ======
 +
 +Este exemplo apresenta um pequeno servidor WWW que atende na porta TCP 8888 e responde aos clientes com uma pequena mensagem pré-definida.
 +
 +<code c www-server.c>
 +#include <stdio.h>
 +#include <errno.h>
 +#include <sys/socket.h>
 +#include <resolv.h>
 +#include <arpa/inet.h>
 +
 +#define PORT    8888
 +
 +int main (int argc, char *argv[])
 +{
 +   int serversock;
 +   struct sockaddr_in self;
 +  
 +   /* cria o socket */
 +   serversock = socket (AF_INET, SOCK_STREAM, 0) ;
 +   if ( serversock < 0 )
 +   {
 +      perror("Erro no socket");
 +      exit(1);
 +   }
 +  
 +   /* monta o endereço */
 +   bzero (&self, sizeof(self));
 +   self.sin_family = AF_INET;
 +   self.sin_port   = htons(PORT);
 +   self.sin_addr.s_addr = INADDR_ANY; /* uso o endereço do host */
 +  
 +   /* associa o endereço ao socket */
 +   if ( bind (serversock, (struct sockaddr*)&self, sizeof(self)) )
 +   {
 +      perror("Erro no bind");
 +      exit(1);
 +   }
 +  
 +   /* coloca o socket em escuta */
 +   if ( listen (serversock, 20) )
 +   {
 +      perror("Erro no listen");
 +      exit(1);
 +   }
 +  
 +   while (1)
 +   {
 +      int clientsock;   
 +      struct sockaddr_in client_addr;
 +      int addrlen = sizeof (client_addr);
 +      char * resposta ;
 +     
 +      /* aguarda e aceita uma conexão externa */
 +      clientsock = accept (serversock, (struct sockaddr*)&client_addr, &addrlen);
 +     
 +      printf ("Client %s:%d connected\n",
 +              inet_ntoa (client_addr.sin_addr),
 +              ntohs (client_addr.sin_port));
 +     
 +      /* envia uma resposta HTTP padrão */
 +      resposta = "HTTP/1.1 200 Ok\n\nFunciona mesmo !\n" ;
 +     
 +      write (clientsock, resposta, strlen (resposta));
 +     
 +      /* fecha o socket da conexão recebida */
 +      close (clientsock);
 +   }
 +  
 +   /* encerra o socket servidor */
 +   close (serversock);
 +  
 +   return 0;
 +}
 +</code>