Volnys Bernal 1. Trabalho Chat UDP. PSI 2653 Meios Eletrônicos Interativos I

Documentos relacionados
Exercício Programa Mini Web Server

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP

Servidor TCP. Programação Sockets. (c) Volnys Bernal. Servidor TCP Resumo das Chamadas TCP. Resumo das Chamadas TCP. Resumo das Chamadas TCP

Servidor UDP. Programação Sockets Volnys Bernal. Servidor UDP Resumo das Chamadas UDP. Resumo de Chamadas UDP. Resumo de Chamadas UDP

Servidor UDP Volnys Borges Bernal Departamento de Sistemas Eletrônicos Escola Politécnica da USP

Servidor TCP Volnys Borges Bernal Depto de Engenharia de Sistemas Eletrônicos Escola Politécnica da USP

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Resumo das chamadas UDP. Resumo de Chamadas UDP.

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Chamadas UDP. Resumo de Chamadas UDP.

Cliente TCP. Programação sockets. Agenda. Cliente TCP. Chamadas sockets para TCP. Chamada socket() Chamada socket()

Disciplina de Algoritmos e Programação

LÓGICA DE PROGRAMAÇÃO. Resumo da Linguagem C. Sérgio Carlos Portari Júnior

Linguagem de Programação

Camada de Transporte Protocolos TCP e UDP

Aula 16: Manipulação de Arquivos em C

Revisão. Profa Marina Gomes

Algoritmos e Programação

Trabalho 10: Simulação de Roteador IPv6

Camada de Transporte. Protocolos TCP e UDP

User Datagram Protocol

Programação de Computadores I Funções Básicas da Linguagem C PROFESSORA CINTIA CAETANO

Comunicação entre Processos

Fundamentos de Programação 1

Aula 3:Introdução à Linguagem C

Computação Eletrônica. Strings. Prof: Luciano Barbosa. CIn.ufpe.br

Redes de Computadores Aula 5

Tratamento de Caracteres

Computação 2. Aula 8. Profª. Fabiany Arquivos

MANUAL DE INSTALAÇÃO E PROGRAMAÇÃO CONVERSOR - IP / USB / SERIAL RV1

Sockets e Threads em Java

Cliente UDP. Programação sockets. Agenda. Cliente UDP. Resumo de Chamadas UDP. Chamadas UDP. Resumo de Chamadas UDP.

FUNDAMENTOS DE REDES DE COMPUTADORES Unidade 5 Camada de Transporte e Aplicação. Luiz Leão

3.1 - Funções para manipular dados de entrada e saída padrão

Segurança 2. Pedro Cruz. EEL770 Sistemas Operacionais

Prof. Marcelo Cunha Parte 6

Sistemas Distribuídos

Redes de Computadores e Aplicações

Redes de Computadores

Leitura de Arquivos. Prof. Fabrício Olivetti de França

4,0 pontos), exclusão de registro e exclusão completa de dados; 3. A nota final do trabalho terá um peso 4.

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Variáveis, Comandos de Atribuição e Comando de Entrada e Saída

Redes de Computadores

Linguagem C. André Tavares da Silva.

Outline. 33. Manipulação de arquivos DIM

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Funções da. Os principais serviços oferecidos pela camada de transporte são: Controle de conexão, Fragmentação, Endereçamento e Confiabilidade.

Escola Politécnica da Universidade de São Paulo

Algoritmos e Lógica de Programação 80 horas // 4 h/semana. Para começar... Strings. Para começar... Strings. Exemplo...

Programação com Sockets

Redes TCP/IP. Prof. M.Sc. Alexandre Fraga de Araújo. INSTITUTO FEDERAL DO ESPÍRITO SANTO Campus Cachoeiro de Itapemirim

Linguagem C Introdução. Contexto Histórico Principais diferenças do Java Funções em C Compilar programas em C no Linux

Linguagem C Ficheiros Compilação Separada

Linguagem C: Introdução

Estrutura de Dados. Cadeia de Caracteres. Roberto Araujo Ago/2013

ECT1203 Linguagem de Programação

Resolução de Nomes Volnys Borges Bernal Deparatamento de Sistemas Eletrônicos Escola Politécnica da USP

Protocolos TCP e UDP. Protocolo TCP. Protocolo TCP. A necessidade de uma comunicação segura: Transmission Control Protocol

MANUAL DO ALUNO PORTAL UNIVERSITÁRIO - UniMB Sanmia Shunn de Oliveira Jesus Costa 1 Walex Milto Martins dos Santos 2

REDES DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Computação remota interativa

Instituto de Ensino Superior de Rio Verde - IESRIVER SEMIPRESENCIAL MANUAL DO ALUNO SEMIPRESENCIAL MANUAL DO ALUNO MOODLE

Aula 9 Oficina de Programação Strings. Profa. Elaine Faria UFU

Olimpíadas de Informática Aulas preparatórias Introdução a Programação em C.

Linguagem de Programação C. Arquivos

Introdução a Programação de Jogos

Aula de Socket. Rafael De Tommaso do Valle

Apêndice B. Cadeias de Caracteres (Strings)

Disciplina de Algoritmos e Programação

Departamento de Sistemas de Computação Universidade de São Paulo Introdução a Ciência de Computação I. Aula 13 Arquivos

Redes de Computadores I Internet - Conceitos

Níkolas Timóteo Paulino da Silva Redes de Computadores I ADS 2ºTermo

Redes de Computadores e Aplicações Camada de aplicação IGOR ALVES

Introdução à Programação

Redes de computadores. Protocolo TCP

Sumário. Ficheiros. Ficheiros

Aulas preparatórias Introdução a Programação em Linguagem C

Programação Estruturada

Computação 2. Aula 9. Diego Addan Arquivos

LINGUAGEM C: ARRAYS DE CARACTERES: STRINGS

Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação. Profa Rosana Braga

Programação em Sockets visando verificar a diferença entre transmissão confiável (TCP) e não confiável (UDP)

Esta primeira parte do manual do Moodle está destinada para orientações em como acessar o curso, atualizar o perfil e realizar as atividades.

PROTOCOLOS DE COMUNICAÇÃO

Segundo Trabalho Prático Turma A

Protocolos de Rede. Protocolos em camadas

Redes de Computadores e Aplicações. Aula 43 - Camada de Transporte TCP (Transmission Control Protocol)

Volnys Borges Bernal. Agenda. Resolução de Nomes. Introdução à resolução de nomes. Introdução à resolução de nomes

Sockets - Conceitos Básicos. COMUNICAÇÃO ENTRE PROCESSOS Sockets. Conceitos Básicos. Tipos de Sockets

prim = A ; prim = &A[0];

Linguagem de Programação C

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Transferência de Arquivo: Protocolo FTP

Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

Programação Estruturada Prof. Rodrigo Hausen Entrada e Saída Parte 2

Estruturas de Dados Aula 6: Cadeias de 28/03/2010

Estruturas de Dados Aula 6: Cadeias de Caracteres

Programação. MEAer e LEE. Manipulação de ficheiros de texto. Bertinho Andrade da Costa. Instituto Superior Técnico. 2010/2011 1º Semestre

LINGUAGEM C: ARQUIVOS

Transcrição:

2007-2017 Volnys Bernal 1 Trabalho PSI 2653 Meios Eletrônicos Interativos I

2007-2017 Volnys Bernal 2 Objetivo: Desenvolvimento de um programa chat UDP (cliente e servidor) Grupo Cada grupo deve escolher implementar o servidor ou o cliente Cada grupo de 2 pessoas Formato do trabalho Papel A4, folhas grampeadas (não encadernar!!) Página de rosto informando: Nome da disciplina, título do trabalho e nome dos autores Entrega: Data entrega: 11 de maio Entrega do trabalho escrito durante a aula Execução do programa durante a aula Serão descontados 2 pontos da nota para cada dia de aula em atraso

2007-2017 Volnys Bernal 3 Servidor Chat Cliente Chat Cliente Chat Cliente Chat

2007-2017 Volnys Bernal 4 Servidor Chat Rx Tx Cliente Chat Rx Tx Cliente Chat Rx Tx Cliente Chat

2007-2017 Volnys Bernal 5 Servidor CHAT UDP Deve aguardar requisições na porta 10.000 Deve permitir sessões de chat com até 3 usuários (3 clientes chat) simultaneamente Deve apresentar a mensagem Número de usuários excedido quando exceder a capacidade de 3 usuários de chat (3 clientes chat) Deve guardar o socketaddress do cliente quando receber mensagem de pedido de entrada no chat (USER) Deve armazenar o nome do usuário Deve verificar, para cada mensagem recebida, o socketaddress de origem. Deve, a cada 30s, encaminhar mensagem TESTE a cada usuário com a finalidade de verificar se ainda está ativo. Caso duas mensagens de teste não sejam respondidas, deve realizar a saída do usuário do Chat Quando receber uma mensagem EXIT deve enviar a seguinte mensagem a todos os clientes <user>: Saiu

2007-2017 Volnys Bernal 6 Cliente CHAT UDP Deve enviar datagramas UDP para a porta 10.000 do servidor chat Deve possuir dois threads: Thread transmissor: Obtém a mensagem do usuário e a transmite ao servidor Thread receptor: Aguarda mensagens do servidor e apresenta no terminal A tela de recepção deve apresentar as mensagens para o usuário da seguinte forma: Maria > Olá a todos Ricardo> Olá Maria Jose > Olá Maria, seja bem vinda. Deve, a cada 30s, encaminhar mensagem TESTE ao servidor com a finalidade de verificar se a conexão está ativa ou se o servidor está ativo. Caso duas mensagens de teste não sejam respondidas, deve mostrar na tela do usuário e terminar o programa.

2007-2017 Volnys Bernal 7 Formato das mensagens A mensagem utilizada na comunicação entre o cliente e servidor é codificada em ASCII. A mensagem possui duas partes: Comando: tamanho de 5 caracteres Dado: tamanho variável, de 1 a 90 bytes (incluindo caractere \0 ) comando dado : \0 5 bytes (1 a 90 bytes)

2007-2017 Volnys Bernal 8 Comandos iniciados no cliente Mensagem (cliente) USER (entrar no chat) UP (enviar mensagem) EXIT TEST Resposta (servidor) OKOK BUSY (sem slot de usuário) (sem resposta) BYE (confirmação da saída) OKOK Comandos iniciados no servidor Mensagem (servidor) DOWN (mostrar mensagem) TEST Resposta (cliente) (sem resposta) OKOK

2007-2017 Volnys Bernal 9 Mensagem USER Solicitação de entrada de usuário ao chat Mensagem encaminhada pelo cliente Servidor chat deve armazenar os dados deste usuário: Nome (até 10 caracteres) Socket address Servidor deve responder: OKOK Sucesso BUSY Número de usuários excedido Formato: 5 bytes 10 bytes 1 byte USER:<nome do usuário>\0

2007-2017 Volnys Bernal 10 Mensagem OKOK Confirmação de sucesso Mensagem encaminhada pelo cliente ou pelo servidor 5 bytes 1 byte OKOK:\0 Mensagem BUSY Indicação de excesso de usuários Mensagem encaminhada pelo servidor em resposta a USER quando há excesso de usuário e não existe slot disponível 5 bytes 1 byte BUSY:\0

2007-2017 Volnys Bernal 11 Mensagem UP Envio de texto de mensagem do cliente ao servidor. O servidor deve obter o nome do usuário de sua tabela de controle a partir do endereço socket da mensagem recebida. Não existe mensagem de confirmação OKOK do servidor Mensagem DOWN. 5 bytes Max 79 bytes 1 byte UP :<texto da mensagem>\0 Envio de texto de mensagem do servidor ao cliente. Deve adicionar ao texto da mensagem o nome do usuário obtido de sua tabela de controle. Não existe mensagem de confirmação OKOK do cliente 5 bytes 10 bytes Max 79 bytes 1 byte DOWN:<user> :<texto da mensagem> \0

2007-2017 Volnys Bernal 12 Mensagem EXIT Pedido de saída do Chat Mensagem encaminhado do cliente ao servidor Servidor deve liberar slot ocupado pelo usuário Servidor deve confirmar encaminhando mensagem BYE ao cliente Servidor deve gerar mensagem DOWN a todos clientes <usuário> saiu. EXIT:\0 Mensagem BYE Confirmação de saida de cliente Mensagem encaminhada do servidor ao cliente. Cliente deve terminar o programa chat ao receber a mensagem BYE. 5 bytes 1 byte 5 bytes 1 byte BYE :\0

2007-2017 Volnys Bernal 13 Mensagem TEST Pedido de teste de conecção Mensagem encaminhado pelo cliente ou pelo servidor Receptor da mensagem TEST deve responder com mensagem OKOK. 5 bytes 1 byte TEST:\0

2007-2017 Volnys Bernal 14 Resumo das mensagens 5 bytes 10 bytes 1 byte USER:<nome do usuário>\0 5 bytes 1 byte OKOK:\0 5 bytes Max 79 bytes 1 byte 5 bytes 1 byte UP :<texto da mensagem>\0 BUSY:\0 5 bytes 10 bytes Max 79 bytes 1 byte DOWN:<user> :<texto da mensagem> \0 5 bytes 1 byte TEST:\0 5 bytes 1 byte EXIT:\0 5 bytes 1 byte BYE :\0

2007-2017 Volnys Bernal 15 Servidor Chat CLIENTE USER:Maria OKOK: SERVIDOR UP :Ola DOWN: Maria :Ola DOWN:Ricardo :Olá Maria Rx Tx Cliente Chat UP :Como está? DOWN:Maria :Como está? EXIT: BYE :

2007-2017 Volnys Bernal 16 Ambiente e linguagem Ambiente Linux Linguagem C Biblioteca pthreads Interface sockets

Dicas 2007-2017 Volnys Bernal 17

2007-2017 Volnys Bernal 18 Dicas Desenvolva seu projeto em etapas: 1ª etapa: Cliente e servidor ECHO Servidor UDP: servidor ECHO Cliente UDP: cliente ECHO com dois threads (transmissor e receptor) 2ª etapa: Implementação do protocolo Servidor UDP: atendendo somente um cliente Cliente UDP: interagindo com o servidor 3ª etapa: Final Servidor UDP: atendendo até 3 clientes. Cliente UDP: com dois threads (transmissor e receptor)

2007-2017 Volnys Bernal 19 Dicas Manter tabelas de controle no servidor: Manter uma tabela de controle com uma entrada para cada cliente. O tamanho da tabela é o tamanho maximo de clientes Esta tabela deve possuir, no mínimo, as seguintes entradas: Estado da entrada da tabela (livre ou ocupada) nome do usuário (até 10 caracteres + 1 ( \0 ) socket address do cliente

2007-2017 Volnys Bernal 20 Dicas Janelas Em um chat, conforme são digitadas as mensagens, são também recebidas outras mensagens, de forma concorrente. Nesta situação, caso seja utilizada somente uma janela para apresentação das mensagens transmitidas (digitadas) e das mensagens recebidas, tais mensagens poderão ficar intercaladas, tornando muito confuso para o usuário. Assim, devem ser utilizadas duas janelas, uma para digitar as mensagens a serem enviadas e uma outra na qual são apresentadas as mensagens recebidas dos usuários.

2007-2017 Volnys Bernal 21 Dicas Dicas para utilização de duas janelas: Comando para identificação do terminal corrente: tty Trecho de código para enviar mensagens de texto para outro terminal: char terminalname[80]; FILE * terminal;... printf( Entre com o nome do terminal auxliar ao chat: ); scanf( s,terminalname); terminal = fopen(terminalname, a+ ); if (terminal == NULL) { perror( Abertura do terminal ); exit(1); }... fprintf(terminal, teste de terminal \n );...

2007-2017 Volnys Bernal 22 Dicas Funções para desenvolvimento Utilizar fgets() ao invés de scanf() #include <stdio.h> char *fgets (char *string, int size, FILE *stream); Evita problemas de overflow do buffer, pois gets() permite definir o tamanho do buffer. A função fgets() lê caracteres até encontrar newline ou chegar ao tamanho do buffer. O newline é acrescentado à string. O caracter \0 é acrescentado ao final. Exemplo: #include <stdio.h> char buffer[80]; fgets(buffer,80,stdin); buffer[strlen(buffer)-1]= \0 ; // retira \n