vamos ver um pequeno exemplo de servidor TCP. No exemplo de hoje vamos construir um servidor, que na verdade não tem muita utilidade, vamos apenas mostrar na tela o IP do cliente que se conectou e a porta que ele utilizou para se conectar. Lembre-se, essa porta não é a porta que o servidor está escutando, e sim a porta, TCP, que o cliente utilizou para se conectar.
Ferramentas utilizadas:
Compilador: gcc, versão 4.4.5 (para saber a versão do gcc usamos o comando gcc -v)
Sistema Operacional: Linux debian 2.6.26-2-amd64 (para saber a versão do sistema usamos o comando
uname -a)
Segue abaixo o código de nosso servidor:
#include <sys/socket.h> #include <stdio.h> #include <arpa/inet.h> #include <netinet/in.h> #include <string.h> void main(int argc, char ** argv) { int listenfd, connfd, porta; //descitores de conexao e varialvel porta que ira armazenar a porta do cliente struct sockaddr_in servaddr, cliaddr; //estruturas sockadd_in para armazenar os dados do server e do cliente socklen_t len; //variavel para armazenar o tamanho da estrutura do cliente char buff[4096];//vai armazenar informacoes sobre o cliente listenfd = socket(AF_INET, SOCK_STREAM,0); memset(&servaddr,0,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(4001); bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); listen(listenfd,10); for(;;) { len = sizeof(cliaddr); connfd = accept(listenfd, (struct sockaddr *)&cliaddr,&len);//vamos aceitar o cliente inet_ntop(AF_INET, &(cliaddr.sin_addr), buff, sizeof(buff));//vamos transformar o endereco no formato xxx.xxx.xxx.xxx e armazernar em buff porta = ntohs(cliaddr.sin_port);//vamos identificar a porta que o cliente usou para se conectar printf("Cliente: %s, porta: %d \n", buff, porta); close(connfd); } }
você pode colocar esta código no vi, salvar como serv.c e digitar o seguinte comando:
gcc serv.c -o server
vamos rodar:
./server
Quando um cliente se conectar teremos a seguinte mensagem:
Cliente: 10.1.1.2, porta: 8001
Pessoal, espero ter ajudado com essa breve introduções a sockets em sistemas linux.
Nenhum comentário:
Postar um comentário