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

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

Interações cliente/servidor usando o UDP

Apresentações semelhantes


Apresentação em tema: "Interações cliente/servidor usando o UDP"— Transcrição da apresentação:

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

2 Servidor UDP (US.C) – 1 de 3 #include <stdio.h>
#include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #define TAM_MSG_MAX /* 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 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");

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"); printf("\nUDP SERVER: Enviei o texto (%s)\n",mensagem);fflush(stdout); /* não passa por aqui */

5 Cliente UDP (UC.C) – 1 de 3 #include <stdio.h>
#include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #define TAM_MSG_MAX /* 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 Cliente UDP (UC.C) – 2 de 3 /* Parâmetros - INICIO */
if ((argc < 2) || (argc > 3)) /* Testa se o número de parâmetros está correto */ { printf("Uso: ./uc <IP Servidor> <Palavra de Echo>\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"); /* 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 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"); printf("\nUDP CLIENT: Recebi o texto !!! (%s)\n",mensagem); /* Fechar socket do cliente */ close(socket_cliente);

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

9 Servidor TCP (TS.C) – 1 de 3 #include <stdio.h>
#include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #define CONEXOES_EM_ESPERA /* Número máximo de requisições para conexão pendentes */ #define TAM_MSG_MAX /* 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 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"); /* Indica que o socket escutará as conexões */ if (listen(socket_servidor, CONEXOES_EM_ESPERA) < 0) printf("listen() falhou");

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"); 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 Cliente TCP(TC.C) – 1 de 3 #include <stdio.h>
#include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #define TAM_MSG_MAX /* 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 < 2) || (argc > 3)) /* Testa se o número de parâmetros está correta */ printf("Uso: ./tc <IP Servidor> <Palavra>\n"); return; }

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 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"); 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"); printf("\nTCP CLIENT: Recebi o texto !!! (%s)\n",mensagem); /* Fechar socket do cliente */ close(socket_cliente);

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


Carregar ppt "Interações cliente/servidor usando o UDP"

Apresentações semelhantes


Anúncios Google