Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior | |||
pua:servidor_tcp [2010/09/30 00:36] – maziero | pua:servidor_tcp [2014/03/27 12: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 < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | #define PORT 8888 | ||
+ | |||
+ | int main (int argc, char *argv[]) | ||
+ | { | ||
+ | int serversock; | ||
+ | | ||
+ | | ||
+ | /* cria o socket */ | ||
+ | | ||
+ | if ( serversock < 0 ) | ||
+ | { | ||
+ | perror(" | ||
+ | exit(1); | ||
+ | } | ||
+ | | ||
+ | /* monta o endereço */ | ||
+ | bzero (&self, sizeof(self)); | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | /* associa o endereço ao socket */ | ||
+ | if ( bind (serversock, | ||
+ | { | ||
+ | perror(" | ||
+ | exit(1); | ||
+ | } | ||
+ | | ||
+ | /* coloca o socket em escuta */ | ||
+ | if ( listen (serversock, | ||
+ | { | ||
+ | perror(" | ||
+ | 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, | ||
+ | |||
+ | printf (" | ||
+ | inet_ntoa (client_addr.sin_addr), | ||
+ | ntohs (client_addr.sin_port)); | ||
+ | |||
+ | /* envia uma resposta HTTP padrão */ | ||
+ | resposta = " | ||
+ | |||
+ | write (clientsock, | ||
+ | |||
+ | /* fecha o socket da conexão recebida */ | ||
+ | close (clientsock); | ||
+ | } | ||
+ | | ||
+ | /* encerra o socket servidor */ | ||
+ | close (serversock); | ||
+ | | ||
+ | | ||
+ | } | ||
+ | </ | ||