inicie a contagem de tempo (veja man 2 times e man 3 sysconf)(*) 1. leia uma linha da entrada padrão enquanto não for EOF (use fgets(..., stdin))(*) 2. envie a linha lida ao servidor (via send() ou write()) 3. leia do socket a linha ecoada pelo servidor (via recv() ou read() ) 4. escreva a linha recebida na saída padrão (use fputs(..., stdout)) volte ao passo 1 5. finalize a contagem de tempo e exiba as seguintes estatísticas na saída de erro (stderr): número de linhas enviadas, tamanho em caracteres da maior linha, número total de caracteres enviados, número de linhas recebidas, número total de caracteres recebidos, tempo total em segundos(com precisão de 0.1 s)O que V. deve fazer:
int sockfd, conn_fd; /* listen on sock_fd, new connection on new_fd */ struct sockaddr_in my_addr; /* dados do "socket local" do servidor*/ struct sockaddr_in their_addr; /* para dados do soclet remoto" do cliente */ sockfd = socket(AF_INET, SOCK_STREAM, 0); inicialize a struct my_addr bind() listen() conn_fd = accept() while ( (nbytes =read(conn_fd, recvline, MAXLINE)) > 0) { write(conn_fd, recvline,nbytes) } close(conn_fd)
client_echo nome_maquina_servidora < /etc/termcap > /dev/nullCompare o número total de linhas e caracteres recebidos com a saída do utilitário wc.
(*) Sempre que tiver dúvidas sobre a sintaxe de uma função em C consulte a man page correspondente!
(**)Todas as medidas de tempo das atividades a serem apresentadas visam obter tempos de transmissão/recepção na rede + tempo de processamento pelo kernel TCP ou UDP; não devem ser influenciadas por tempos de saída no vídeo seja no cliente ou no servidor, tempos de abertura de conexão e por tempos de leitura de arquivos do disco. Esta é a razão pela qual as estatíticas solicitadas devem ser enviadas para a saída de erro (stderr) e não para a saída padrão (stdout) As medidas de tempo devem ser feitas com o cliente e servidor em subredes distintas, por exemplo, o cliente numa das máquinas dos laboratórios e o servidor na xaveco.