Buscar

Protocolo de Chat Distribuído

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.

Continue navegando