MC833A - 2019
Programação de Redes de Computadores

Exercício 4 - Multiplexação de Entrada/Saída

Critérios para entrega do exercício
Atividade
Passos:
  1. Modifique o programa cliente de eco da atividade 2 para que este receba como entrada e envie ao servidor linhas de um arquivo texto qualquer (O arquivo será passado utilizando o caracter de redirecionamento '<'). O cliente continuará recebendo o eco enviado pelo servidor, que deverá ser escrito em um arquivo (O arquivo será criado utilizando o caracter de redirecionamento '>'). Seu programa deverá necessariamente utilizar ou a função select ou a função poll.
    *IMPORTANTE*: O código será testado com arquivos texto de cerca de 20000 linhas e 1MB. Para certificar que seu código está funcionando corretamente, use arquivos com tamanhos próximos a esses durante os testes.

    Cada linha deve ser enviada separadamente para o servidor e elas não necessariamente precisam constituir comandos do Unix, porque o servidor não deverá executá-las. O servidor só irá enviá-las de volta para o cliente.

    O cliente deve finalizar sua execução assim que tiver recebido todo o arquivo ecoado pelo servidor.

    • Dica 1: Dependendo da sua forma de implementação, poderá acontecer do cliente encerrar a conexão ao ler uma linha em branco ou o fim do arquivo, sem esperar a chegada de todos os dados ``ecoados'' pelo servidor. Caso isso aconteça, é necessário tratar o trecho de captura dos dados da entrada padrão no seu código. Uma forma de verificar se isso está ocorrendo é rodar o diff no cliente entre o arquivo de entrada (passado pelo '<') e o arquivo de saída (gerado pelo '>')

    • Dica 2: Uma boa ajuda para desenvolver esta atividade poderá ser encontrada nos exemplos do livro-texto da disciplina (capítulo 6) e nos programas utilizados na segunda atividade parte 1 e parte 2.

  2. Comparando o código implementado no passo 1 com o código original da atividade prática 4 em termos de melhor utilização da rede e, consequentemente, tempo de execução, há alguma vantagem em utilizar o código novo? Justifique.

    • Dica 1: Uma forma de verificar a diferença é comparar o tempo de execução dos dois clientes. Para isso você pode utilizar o programa time que já vem embutido no shell bash e verificar a saída da linha real. Para executá-lo basta chamá-lo na linha de comando antes do cliente. Por exemplo:
    • mc833@localhost:$ time ./cliente 192.168.1.13 1234 < in > out

      real 0m0.191s

      user 0m0.004s

      sys 0m0.052s

    • Dica neste link

Instituto de Computação
Universidade Estadual de Campinas
Av Albert Einstein 1251
13083-852 Campinas, SP - Brazil