A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Interações cliente/servidor usando o UDP Servidor (US.C) Cliente (UC.C) socket_servidor = socket() bind na porta = 9000 recv(socket_servidor, mensagem)

Apresentações semelhantes


Apresentação em tema: "1 Interações cliente/servidor usando o UDP Servidor (US.C) Cliente (UC.C) socket_servidor = socket() bind na porta = 9000 recv(socket_servidor, mensagem)"— Transcrição da apresentação:

1 1 Interações cliente/servidor usando o UDP Servidor (US.C) Cliente (UC.C) socket_servidor = socket() bind na porta = 9000 recv(socket_servidor, mensagem) send(socket_servidor, mensagem) socket_client = socket() send(socket_cliente, mensagem) recv(socket_cliente, mensagem) close(socket_cliente) mensagem Endereço do Servidor mensagem

2 2 Servidor UDP (US.C) – 1 de 3 #include #define TAM_MSG_MAX 255 /* Mensagem de maior tamanho */ int main(void) {/* Variáveis */ char mensagem[TAM_MSG_MAX]; /* Espaço para a recepção da mensagem do cliente*/ int tam_mensagem_recebida; /* Tamanho da mensagem recebida */ int socket_servidor; /* Socket do servidor */ struct sockaddr_in endereco_servidor; /* Endereço Local */ struct sockaddr_in endereco_cliente; /* Endereço do Cliente */ unsigned short porta_servidor; /* Porta do servidor */ unsigned int tam_endereco_cliente; /* Tamanho da estrutura do endereço do cliente */

3 3 Servidor UDP (US.C) – 2 de 3 porta_servidor = 9000; /* Porta local */ /* Criação do socket datagrama/UDP para recepção e envio de pacotes */ if ((socket_servidor = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { printf("socket() falhou"); return; } /* Construção da estrutura de endereço local */ /* Limpar a estrutura */ memset(&endereco_servidor, 0, sizeof(endereco_servidor)); /* Família de endereçamento da Internet */ endereco_servidor.sin_family = AF_INET; /* Qualquer interface de entrada */ endereco_servidor.sin_addr.s_addr = htonl(INADDR_ANY); /* Porta local */ endereco_servidor.sin_port = htons(porta_servidor); /* Instanciar o endereco local */ if (bind(socket_servidor, (struct sockaddr *) &endereco_servidor, sizeof(endereco_servidor)) < 0) { printf("bind() falhou"); return; }

4 4 Servidor UDP (US.C) – 3 de 3 for (;;) /* Loop eterno */ { /* Define o tamanho do endereço de recepção e envio */ tam_endereco_cliente = sizeof(endereco_cliente); /* Limpar a mensagem para receber uma nova */ memset((void *) mensagem,(int) NULL,TAM_MSG_MAX); /* Espera pela recepção de alguma mensagem de algum cliente */ if ((tam_mensagem_recebida = recvfrom(socket_servidor, mensagem, TAM_MSG_MAX, 0, (struct sockaddr *) &endereco_cliente, &tam_endereco_cliente)) < 0) { printf("recvfrom() falhou"); return; } printf("\nUDP SERVER: Recebi o texto (%s)\n",mensagem); /* Devolve o conteúdo do datagrama para o cliente */ if (sendto(socket_servidor,mensagem,tam_mensagem_recebida,0, (struct sockaddr *)&endereco_cliente,sizeof(endereco_cliente))!=tam_mensagem_recebida) { printf("sendto() enviou um numero de bytes diferente do esperado"); return; } printf("\nUDP SERVER: Enviei o texto (%s)\n",mensagem);fflush(stdout); } /* não passa por aqui */ }

5 5 Cliente UDP (UC.C) – 1 de 3 #include #define TAM_MSG_MAX 255 /* Mensagem de maior tamanho */ void main(int argc, char *argv[]) { char mensagem[TAM_MSG_MAX]; /* Mensagem a ser enviada e recebida do servidor */ int tam_mensagem; /* Tamanho da mensagem */ int socket_cliente; /* Socket do cliente */ struct sockaddr_in endereco_servidor; /* Endereço do servidor */ unsigned short porta_servidor; /* Porta do servidor */ unsigned int tam_endereco_servidor; /* Tamanho do endereço de envio e recepção (recvfrom()) */ char IP_do_servidor[TAM_MSG_MAX]; /* Endereço IP do servidor */

6 6 Cliente UDP (UC.C) – 2 de 3 /* Parâmetros - INICIO */ if ((argc 3)) /* Testa se o número de parâmetros está correto */ { printf("Uso:./uc \n"); return; } porta_servidor = 9000; /* Porta do Servidor UDP */ memset((void *) IP_do_servidor,(int) NULL,TAM_MSG_MAX); /* Limpa o IP do Servidor */ strcpy(IP_do_servidor,argv[1]); /* Copia o IP do Servidor */ memset((void *) mensagem,(int) NULL,TAM_MSG_MAX); /* Limpa a mensagem a ser enviada para o servidor */ strcpy(mensagem,argv[2]); /* Mensagem a ser enviada para o servidor */ /* Parâmetros - FINAL */ /* Criação do socket datagrama/UDP */ if ((socket_cliente = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) { printf("socket() falhou"); return; } /* Construção da estrutura de endereço do servidor */ memset(&endereco_servidor, 0, sizeof(endereco_servidor)); /* Limpar a estrutura */ endereco_servidor.sin_family = AF_INET; /* Família de endereçamento da Internet */ endereco_servidor.sin_addr.s_addr = inet_addr(IP_do_servidor);/* Endereço IP do Servidor */ endereco_servidor.sin_port = htons(porta_servidor); /* Porta do Servidor */

7 7 Cliente UDP (UC.C) – 3 de 3 /* Salva o tamanho da mensagem a ser enviada */ tam_mensagem = strlen(mensagem); /* Envio da mensagem para o servidor */ if (sendto(socket_cliente, mensagem, tam_mensagem, 0, (struct sockaddr *) &endereco_servidor, sizeof(endereco_servidor)) != tam_mensagem) { printf("sendto() falhou"); return; } printf("\nUDP CLIENT: Enviei o texto !!! (%s)\n",mensagem); /* limpa a mensagem */ memset((void *) mensagem,(int) NULL,TAM_MSG_MAX); /* Limpar a estrutura */ memset(&endereco_servidor, 0, sizeof(endereco_servidor)); tam_endereco_servidor = sizeof(endereco_servidor); /* Reberendo a resposta do servidor */ if ((recvfrom(socket_cliente, mensagem, TAM_MSG_MAX, 0, (struct sockaddr *) &endereco_servidor, &tam_endereco_servidor)) != tam_mensagem) { printf("recvfrom() falhou"); return; } printf("\nUDP CLIENT: Recebi o texto !!! (%s)\n",mensagem); /* Fechar socket do cliente */ close(socket_cliente); return; }

8 8 Interações cliente/servidor usando o TCP Servidor (TS.C) Cliente (TC.C) socket_servidor = socket() bind na porta = 8000 listen(socket_servidor, CONEXOES_EM_ESPERA) socket_cliente = accept(socket_servidor) recv(socket_cliente, mensagem) send(socket_cliente, mensagem) close(socket_cliente) socket_client = socket() connect(socket_cliente, endereco_servidor) send(socket_cliente, mensagem) recv(socket_cliente, mensagem) close(socket_cliente) mensagem Endereço do Servidor Conexão TCP mensagem

9 9 Servidor TCP (TS.C) – 1 de 3 #include #define CONEXOES_EM_ESPERA 5 /* Número máximo de requisições para conexão pendentes */ #define TAM_MSG_MAX 255 /* Mensagem de maior tamanho */ int main(void) { /* Variáveis */ char mensagem[TAM_MSG_MAX]; /* Espaço para a recepção da mensagem do cliente */ int tam_mensagem_recebida; /* Tamanho da mensagem recebida */ int socket_servidor; /* Socket do servidor */ int socket_cliente; /* Socket do cliente */ struct sockaddr_in endereco_servidor; /* Endereço Local */ struct sockaddr_in endereco_cliente; /* Endereço do Cliente */ unsigned short porta_servidor; /* Porta do servidor */ unsigned int tam_endereco_cliente; /* Tamanho da estrutura do endereço do cliente */ porta_servidor = 8000; /* Porta local */

10 10 Servidor TCP (TS.C) – 2 de 3 /* Criação do socket para as conexões dos clientes */ if ((socket_servidor = socket(PF_INET, SOCK_STREAM, 0)) < 0) { printf("socket() falhou"); return; } /* Construção da estrutura de endereço local */ memset(&endereco_servidor, 0, sizeof(endereco_servidor)); /* Limpar a estrutura */ endereco_servidor.sin_family = AF_INET; /* Família de endereçamento da Internet */ endereco_servidor.sin_addr.s_addr = htonl(INADDR_ANY); /* Qualquer interface de entrada */ endereco_servidor.sin_port = htons(porta_servidor); /* Porta local */ /* Instanciar o endereco local */ if (bind(socket_servidor,(struct sockaddr*)&endereco_servidor,sizeof(endereco_servidor))<0) { printf("bind() falhou"); return; } /* Indica que o socket escutará as conexões */ if (listen(socket_servidor, CONEXOES_EM_ESPERA) < 0) { printf("listen() falhou"); return; }

11 11 Servidor TCP (TS.C) – 3 de 3 for (;;) /* Loop eterno */ { /* Define o tamanho do endereço de recepção e envio */ tam_endereco_cliente = sizeof(endereco_cliente); /* Aguarda pela conexão de um cliente */ if ((socket_cliente = accept(socket_servidor, (struct sockaddr *) &endereco_cliente, &tam_endereco_cliente)) < 0) { printf("accept() falhou"); return; } /* Limpar a mensagem para receber uma nova */ memset((void *) mensagem,(int) NULL,TAM_MSG_MAX); /* Recebe a mensagem do cliente */ if ((tam_mensagem_recebida = recv(socket_cliente, mensagem, TAM_MSG_MAX, 0)) < 0) { printf("recv() falhou"); return; } printf("\nTCP SERVER: Recebi o texto (%s)\n",mensagem); /* Devolve a mensagem recebida para o cliente */ if (send(socket_cliente, mensagem, tam_mensagem_recebida, 0) != tam_mensagem_recebida) { printf("send() falhou"); } printf("\nTCP SERVER: Enviei o texto (%s)\n",mensagem); close(socket_cliente); /* Fecha o socket do cliente */ } /*não passa por aqui */ }

12 12 Cliente TCP(TC.C) – 1 de 3 #include #define TAM_MSG_MAX 255 /* Mensagem de maior tamanho */ int main(int argc, char *argv[]) { char mensagem[TAM_MSG_MAX]; /* Mensagem a ser enviada e recebida do servidor */ int tam_mensagem; /* Tamanho da mensagem */ int socket_cliente; /* Socket do cliente */ struct sockaddr_in endereco_servidor; /* Endereço do servidor */ unsigned short porta_servidor; /* Porta do servidor */ char IP_do_servidor[TAM_MSG_MAX]; /* Endereço IP do servidor */ /* Parâmetros - INICIO */ if ((argc 3)) /* Testa se o número de parâmetros está correta */ { printf("Uso:./tc \n"); return; }

13 13 Cliente TCP(TC.C) – 2 de 3 porta_servidor = 8000; /* Porta do Servidor TCP */ /* Limpa o IP do Servidor */ memset((void *) IP_do_servidor,(int) NULL,TAM_MSG_MAX); strcpy(IP_do_servidor,argv[1]); /* Copia o IP do Servidor */ /* Limpa a mensagem a ser enviada para o servidor */ memset((void *) mensagem,(int) NULL,TAM_MSG_MAX); strcpy(mensagem,argv[2]); /* Mensagem a ser enviada para o servidor */ /* Parâmetros - FINAL */ /* Criação do socket usando o TCP */ if ((socket_cliente = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { printf("socket() falhou"); return; } /* Construção da estrutura de endereço do servidor */ /* Limpar a estrutura */ memset(&endereco_servidor, 0, sizeof(endereco_servidor); endereco_servidor.sin_family = AF_INET; /* Família de protocolos da Internet */ endereco_servidor.sin_addr.s_addr = inet_addr(IP_do_servidor); /* Endereço IP do Servidor */ endereco_servidor.sin_port = htons(porta_servidor); /* Porta do Servidor */

14 14 Cliente TCP(TC.C) – 3 de 3 /* Estabelecimento da conexão com o servidor */ if (connect(socket_cliente,(struct sockaddr *)&endereco_servidor, sizeof(endereco_servidor))<0) { printf("connect() falhou"); return; } /* Salva o tamanho da mensagem a ser enviada */ tam_mensagem = strlen(mensagem); /* Determina o tamanho do string de entrada */ /* Envio da string para o servidor */ if (send(socket_cliente, mensagem, tam_mensagem, 0) != tam_mensagem) { printf("send() falhou"); return; } printf("\nTCP CLIENT: Enviei o texto !!! (%s)\n",mensagem); /* limpa a mensagem */ memset((void *) mensagem,(int) NULL,TAM_MSG_MAX); /* Reberendo como resposta a mesma mensagem vinda do servidor */ if ((tam_mensagem = recv(socket_cliente, mensagem, TAM_MSG_MAX, 0)) <= 0) { printf("recv() falhou"); return; } printf("\nTCP CLIENT: Recebi o texto !!! (%s)\n",mensagem); /* Fechar socket do cliente */ close(socket_cliente); return; }

15 15 Exercícios: r Marque o número nos fontes dos programas, onde: m 1-o servidor TCP estabelece a conexão com o cliente. m 2-o cliente TCP estabelece a conexão com o servidor. m 3-o servidor TCP define quantas conexões podem ficar em espera. m 4-o servidor TCP liga a porta definida ao socket criado. m 5-o servidor UDP devolve a mensagem recebida para o cliente. m 6-o cliente UDP envia a mensagem para o servidor. m 7-o servidor UDP liga a porta definida ao socket criado. m 8-é criado o socket que atenderá ao cliente (recebendo a mensagem de devolvendo) no servidor TCP.


Carregar ppt "1 Interações cliente/servidor usando o UDP Servidor (US.C) Cliente (UC.C) socket_servidor = socket() bind na porta = 9000 recv(socket_servidor, mensagem)"

Apresentações semelhantes


Anúncios Google