Baixe o app para aproveitar ainda mais
Prévia do material em texto
Tópicos Especiais em Redes e Sistemas Distribuídos Definição de um protocolo para um chat Estruturas usadas Struct Cliente { Char Apelido [16] Char IP [16] Char Porta [6] } (Estrutura para armazenar um cliente) Cliente clientesAtivos[12] (Vetor de Clientes Ativos) Formato do comando 9999T...| … |...| “99999”: 5 bytes que representam o tamanho da mensagem “T”: Char (1 byte) que define o tipo “|”: Delimitador Leitura do comando Get(5,tam) Get(1,T) Get(tam,msg) Tipos de mensagem Conectar C Desconectar D ACK S NACK N Mensagem Direta M Broadcast B Envio da Lista L • A primeira mensagem de alguém sempre será um conectar Conectar no chat tamCIP|PORTA|APELIDO| • Cliente requisita conexão enviando seu apelido • Conexão bem-sucedida: Servidor adiciona o cliente na lista de clientes ativos e envia a lista para todos os clientes • Conexão falha: Servidor envia um NACK ACK tamS| NACK tamN| Desconectar do chat tamDAPELIDO| • Cliente solicita desconexão. • Desconexão: Servidor envia um ACK para esse cliente e após isso retira esse cliente da lista de ativos e envia essa lista atualizada para esse cliente. Quando o cliente recebe esse ACK, ele então apaga a sua lista. Enviar lista tamLIP|PORTA|APELIDO|IP|PORTA|APELIDO|...| • Servidor envia a lista para todos os clientes e espera o ACK deles. • Cada cliente envia um ACK para o servidor confirmando que recebeu a lista. Após isso, cada cliente limpa a sua lista antiga, e preenche essa lista com os dados da lista nova. Mensagem Direta tamMAPELIDO|MENSAGEM| • ClienteA envia mensagem para o ClienteB. • ClienteB envia um ACK para o ClienteA após receber a mensagem direta. Broadcast tamBAPELIDO|MENSAGEM| • Cliente envia mensagem em broadcast para o servidor. • Servidor envia um ACK para o Cliente, e em seguida envia a mensagem para cada cliente na lista de clientes ativos . • Cada cliente envia um ACK para o Servidor quando receber a mensagem.
Compartilhar