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); | ||
| + | | ||
| + | | ||
| + | } | ||
| + | </ | ||